在我OnBindViewHolder
我添加了以下代码:
if(checkAllItems) {
viewHolder.checked_for_deletion.setChecked(true);
} else {
viewHolder.checked_for_deletion.setChecked(false);
}
问题是OnBindViewHolder
仅调用可见项+默认为2的缓存项。我还需要选择不可见的项目。我四处寻找解决方案,但找不到任何有效的方法。
答案 0 :(得分:3)
绑定ViewHolder
时无法检查所有项目。
这是因为一次只创建了一定数量的ViewHolder
(以填充RecyclerView
)。然后,这些ViewHolder
在超出RecyclerView
范围时被“回收”。它们将被重用于未来的内容行。
您需要做的是保持数据模型中CheckBox
的状态。然后,您检查每次调用CheckBox
是否需要检查onBindViewHolder
。
答案 1 :(得分:0)
以下是我根据上述答案所做的事情,出于某种原因,我必须根据视图更改模型。由于并非所有项目都显示在视图中,因此这显然不起作用。我通过模型师进行了迭代并在那里进行了检查。
checkbox_selectAllListener = new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
int c = 0;
if(isChecked) {
for (TaskModel iterable_element : mDataset) {
iterable_element.setCheckedForDeletion(true);
Log.e("Setting checked ", ""+ c);
c++;
}
} else {
for (TaskModel iterable_element : mDataset) {
iterable_element.setCheckedForDeletion(false);
}
Log.e("Setting unchecked ", ""+ c);
c++;
}
notifyDataSetChanged();
}
};