【发布时间】:2016-11-27 08:18:27
【问题描述】:
我在RecyclerView 项目中有复选框的地方工作。我知道它的一些问题。但是,只有 10 个项目并且没有调用滚动错误的侦听器。
我有这样的事情:
private class MyAdapter extends RecyclerView.Adapter<MyViewHodler> {
ArrayList<String> items;
ArrayList<String> checkedList = new ArrayList<>();
...
public void onBindViewHolder(final MyViewHolder holder, int position) {
String item = items.get(position);
String check = checkedList.get(item);
if(check != null)
holder.vChecked.setChecked(true);
else
holder.vChecked.setChecked(false);
....
holder.vChecked.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
if (isChecked) {
checkedList.add(item);
} else {
checkedList.remove(item);
}
}
}
}
现在,奇怪的是,这个 checkChange 调用是在不同的视图上进行的。我有一个只有 10 个项目的列表,并且适合 recyclerview,没有滚动。我在外部更改数据(项目和检查列表),设置新数据并调用myAdapter.notifyDatasetChanged()
此调用从选中状态中删除了一项。
例如,我检查了 10 个项目。我取消选中 1 项,并基于此进行一些其他计算并调用 myAdapter.notifyDatasetChanged()。它还会取消选中其他 9 个项目中的一个元素。
所以即使不滚动,为什么 onCheckedChange 监听器会为错误的视图调用?
【问题讨论】:
标签: android checkbox android-recyclerview