获取回收器视图中所有项目中单选按钮的已检查状态

时间:2016-06-30 07:15:14

标签: android android-recyclerview

我有RecyclerView,其中包含10个视图,每个视图都有CheckBox。现在,在我的主要活动中,当按下名为“POST”的菜单按钮时,我想知道是否检查了CheckBox的每个视图中的所有RecyclerView

我该如何实现?

3 个答案:

答案 0 :(得分:1)

我建议你在传递给RecyclerView的模型列表的每个模型中传递额外的变量isChecked。 像那样:

public class Model {
    private boolean isChecked;

    public boolean isChecked() {
        return isChecked;
    }

    public void setChecked(boolean checked) {
        isChecked = checked;
    }
}

然后在RecyclerView ViewHolder中创建一个构造函数:

public ListViewHolder(View view) {
   super(view);
   switchCompat = (SwitchCompat) view.findViewById(R.id.add_switch);
   switchCompat.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                getItemAt(getLayoutPosition()).setChecked(isChecked);
            }
   });
}

然后获取所有按钮状态只是遍历您的活动中的模型列表:

public boolean areAllChecked() {
    for (int i = 0; i < adapter.getItemCount(); i++) {
         Model model = adapter.getItemAt(i);
         if (!model .isChecked()) {
             return false;
         }
    }
    return true;
}

答案 1 :(得分:0)

  1. 在模型类中添加布尔值isChecked(要添加到RecyclerView适配器的项目)
  2. 在适配器中onBindViewHolder实施onCheckedChangeListener,并选中isChecked
  3. 在适配器中实现isChecked(int position)方法。它应返回position
  4. 指定的项目的选中值 片段/活动中的
  5. 遍历适配器项,并查明是否所有项都已选中。

答案 2 :(得分:0)

跟踪适配器中每个复选框的状态。 为此,请使用一个映射,该映射存储绑定到每个复选框的唯一键的布尔值。并让它实现 OnCheckedChangeListener

MyAdapter extends RecyclerView.Adapter implements OnCheckedChangeListener {
   private Map<Object, Boolean> checkboxStates = new HasMap<>();

   @Override
   public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
      checkboxStates.put(buttonView.getTag(), isChecked);
   }

   public Map<Object, Boolean> getCheckboxStates() {
     //We don't want the caller to modify adapter state.
     return Collections.unmodifiableMap(this.checkboxStates);
   }

   //other code
   @Override
   public void onBindViewHolder(ViewHolder holder, int position) {
     //your code
     CheckBox cb; 
     //assuming that we have the reference to the cb view
     //also assuming that cb has a unique identifiable tag assigned from the model
     cb.setOnCheckedChangeListener(this);

     if (this.checkboxStates.containsKey(cb.getTag()) {
       cb.setChecked(this.checkboxStates.get(cb.getTag());
     } else {
       this.checkboxStates.put(cb.getTag(), cb.isChecked());
     }
   }
}

使用此功能,您可以调用 getCheckboxStates 来获取每个可见的复选框的状态。

这里的关键点是,您需要为数据集中的每个项目提供唯一可识别的内容,这些内容可用作表示该项目的每个复选框的标记。