我有RecyclerView
,其中包含10个视图,每个视图都有CheckBox
。现在,在我的主要活动中,当按下名为“POST”的菜单按钮时,我想知道是否检查了CheckBox
的每个视图中的所有RecyclerView
。
我该如何实现?
答案 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)
isChecked
(要添加到RecyclerView
适配器的项目)onBindViewHolder
实施onCheckedChangeListener
,并选中isChecked
。isChecked(int position)
方法。它应返回position
答案 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 来获取每个可见的复选框的状态。
这里的关键点是,您需要为数据集中的每个项目提供唯一可识别的内容,这些内容可用作表示该项目的每个复选框的标记。