繁体   English   中英

在RecyclerView android中禁用项目

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM