[英]Disable items in RecyclerView android
我的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);
}
}
现在,这允许项目状态在用户滚动时保持一致(因为RecyclerItem中的View被重新使用)。 它还允许您在启用/禁用Model项目时更轻松地在项目上使用notifyItemChanged(int position)
。
将Recyclerview更改为灰色。 在Recyclerview中,仅在执行某些操作时禁用工作。 如果尝试禁用不执行任何操作,则您有NULL指针异常 。
您需要将您的项目放在传递给适配器的列表中。 如果它是一个自定义适配器,则可以创建一个方法来返回列表,并且代码将是:
mAdapter.getList().get(4).setEnabled(false); //or equivalent
mAdapter.notifyDataSetChanged(); //or mRecycler.getAdapter().notifyDataSetChanged()
您可以尝试:
RecyclerView rv=new RecyclerView(context);
rv.getChildAt(5).setEnabled(false); // disables the 6th element
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.