我的RecyclerView
是一个带复选框的列表,页面底部是一个提交按钮。当我单击按钮时,应禁用复选框,但应保留已检查的那些框的状态。还有,如何访问复选框,因为它位于RecyclerView.ViewHolder
?请帮助。
答案 0 :(得分:2)
将此作为您正在建模的项目的属性会更好。
因此,如果模型项目具有"已启用"声明你可以改变。
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中的视图被重用)。它还允许您在启用/禁用“模型”项时更轻松地在项目上使用notifyItemChanged(int position)
。
答案 1 :(得分:0)
您需要在传递给适配器的列表中获取项目。如果它是自定义适配器,您可以创建一个返回列表的方法,代码将是:
mAdapter.getList().get(4).setEnabled(false); //or equivalent
mAdapter.notifyDataSetChanged(); //or mRecycler.getAdapter().notifyDataSetChanged()
答案 2 :(得分:0)
将Recyclerview的背景颜色更改为灰色。在Recyclerview中,仅在执行某些操作时禁用工作。
答案 3 :(得分:-2)
您可以尝试:
RecyclerView rv=new RecyclerView(context);
rv.getChildAt(5).setEnabled(false); // disables the 6th element