我想在我的项目中使用以下功能:单击全选复选框时,必须选中列表中的所有复选框,取消选中复选框时,必须取消选中所有其他复选框。我通过这样做实现了这个功能:
/*in my main activity i have done this*/
cbSelectAll.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
for (int i = 0; i < resumeSearchList.size(); i++) {
resumeSearchList.get(i).setSelected(cbSelectAll.isChecked());
}
cvSearchResultListAdapter.notifyDataSetChanged();
}
});
}
在适配器类中我已经这样做了..
holder.cbSelect.setChecked(dataList.get(position).isSelected());
现在我的问题是每当我取消选中列表中的任何复选框时,必须取消选中全选按钮。请帮忙
提前致谢
最佳答案
您可以在适配器中的 holder.cbSelect.
上设置 OnCheckedChangeListener
。
holder.cbSelect.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
dataList.get(holder.getAdapterPosition()).setSelected(isChecked);
// here you can call listener to get notified
}
});
}
您可以让监听器
在您的Activity 中得到通知。
用于添加监听器,
<强>1。创建一个接口(interface)
:
public interface OnMyCheckBoxCheckedChangeListener {
void onMyCheckBoxCheckedChange();
}
<强>2。在 Adapter 的构造函数中添加参数:
private OnMyCheckBoxCheckedChangeListener mOnMyCheckBoxCheckedChangeListener;
public YourAdapter(..., ..., OnMyCheckBoxCheckedChangeListener onMyCheckBoxCheckedChangeListener) {
mOnMyCheckBoxCheckedChangeListener = onMyCheckBoxCheckedChangeListener;
}
<强>3。调用要通知的接口(interface):
holder.cbSelect.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
dataList.get(holder.getAdapterPosition()).setSelected(isChecked);
mOnMyCheckBoxCheckedChangeListener.onMyCheckBoxCheckedChange();
}
});
}
<强>4。从您的 Activity 中设置适配器:
yourRecyclerView.setAdapter(new YourAdapter(..., ..., new OnMyCheckBoxCheckedChangeListener() {
@Override
public void onMyCheckBoxCheckedChange() {
// you will get notified here.
}
}));
关于java - 当我在 android 中取消选择甚至 1 个复选框时如何取消选择全选复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53313370/