在RecyclerView android中禁用项目

时间:2016-03-03 15:17:18

标签: android android-recyclerview

我的RecyclerView是一个带复选框的列表,页面底部是一个提交按钮。当我单击按钮时,应禁用复选框,但应保留已检查的那些框的状态。还有,如何访问复选框,因为它位于RecyclerView.ViewHolder?请帮助。

4 个答案:

答案 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