在我的应用程序中,用户将从列表中选择自己的爱好。 现在,我有一个回收站视图,其中显示了爱好的名称和图像以及一个复选框。
我只想启用2个复选框(我可以做到),并且当用户第一次单击一个复选框时,它将显示1
而不是'check',并且当他选择第二个2
。
此外,当未选中1
时,2
将变成1
示例代码:
ArrayList checkedList = new ArrayList();
int first = -1;
int second = -1;
-
@Override
public void onBindViewHolder(@NonNull CustomItemHolder itemHolder, int i) {
final int position = i;
...
if (checkedList.size() > 2){
itemHolder.checkBox.setClickable(false);
}
itemHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked){
checkedList.add(position);
if (first == -1){
first = position;
}
else if (second == -1){
second = position;
}
}
else{
checkedList.remove(position);
if (first == position){
if (second == -1){
first = -1;
}
else{
first = second;
second = -1;
}
}
else if (second == position){
second = -1;
}
}
}
});
}
答案 0 :(得分:0)
我的建议是为每个“爱好”分配一个唯一的ID
public class Hobby {
private final int id;
// ... other fields, getters
}
然后在Presentation对象内部(甚至现在只是在适配器中使它运行)存储已检查内容的列表:
List<Integer> checked;
绑定后,您可以检查此列表中的一些内容:
当您单击某项的复选框并被选中时,会将其ID添加到checked
列表的末尾。取消选中时,将其从列表中删除。通过使用这样的列表,您可以始终确保#1和#2处于正确的顺序,并自动使重新定位(#2变为#1)正确。
在更新检查的ID列表后,请记住在每次单击时都要通知notifyDataSetChanged()。您也可以通过更具体的调用来优化此设置,但这要复杂一些。