我的 RecyclerView
是一个带有复选框的列表,页面底部有一个提交按钮。当我点击按钮时,复选框应该被禁用,但已经选中的复选框状态应该保留。另外,如何访问复选框,因为它在 RecyclerView.ViewHolder
中?请帮忙。
我的 RecyclerView
是一个带有复选框的列表,页面底部有一个提交按钮。当我点击按钮时,复选框应该被禁用,但已经选中的复选框状态应该保留。另外,如何访问复选框,因为它在 RecyclerView.ViewHolder
中?请帮忙。
最好将此作为您正在建模的项目的属性。
因此,如果模型项目将具有可以更改的“启用”状态。
public class Model {
private boolean isEnabled;
private boolean isChecked;
public void setEnabled(boolean enabled) {
isEnabled = enabled;
}
public void setChecked(boolean checked) {
isChecked = checked;
}
public boolean isEnabled() {
return isEnabled;
}
public boolean isChecked() {
return isChecked;
}
}
然后你的ViewHolder将在每次绑定时检查此属性。此外,ViewHolder本身将监听它处理的视图上复选框的更改。
public class ModelViewHolder extends RecyclerView.ViewHolder implements CompoundButton.OnCheckChangeListener {
private CheckBox checkBox;
private Model boundItem;
public ModelViewHolder(View itemView) {
checkBox = (CheckBox) itemView.findItemById(R.id.checkBoxId);
checkBox.setOnCheckChangeListener(this);
}
public void bind(Model model) {
boundItem = model;
getItemView().setEnabled(model.isEnabled());
checkBox.setChecked(model.isChecked());
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
boundItem.setChecked(isChecked);
}
}
notifyItemChanged(int position)
来更新项目。您需要在传递给适配器的列表中获取您的项。如果它是一个自定义适配器,您可以制作一个方法来返回您的列表,并编写以下代码:
mAdapter.getList().get(4).setEnabled(false); //or equivalent
mAdapter.notifyDataSetChanged(); //or mRecycler.getAdapter().notifyDataSetChanged()
将Recyclerview的背景颜色更改为灰色。在Recyclerview中,仅当执行某些操作时才禁用工作。如果尝试禁用但未执行任何操作,则会出现空指针异常。
RecyclerView rv=new RecyclerView(context);
rv.getChildAt(5).setEnabled(false); // disables the 6th element
setEnabled(false)
。然后在适配器上调用notifyDataSetChanged()
,以便重新绑定所有的ViewHolder。复选框将保留其状态。 - DeeV