并非所有项目都在recyclerview android中选中

时间:2016-11-07 13:07:50

标签: android

在我OnBindViewHolder我添加了以下代码:

    if(checkAllItems) {
       viewHolder.checked_for_deletion.setChecked(true);
    } else {
       viewHolder.checked_for_deletion.setChecked(false);
    }

问题是OnBindViewHolder仅调用可见项+默认为2的缓存项。我还需要选择不可见的项目。我四处寻找解决方案,但找不到任何有效的方法。

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();
            }
        };