RecyclerView继续选择滚动时的随机复选框

时间:2018-01-12 15:34:43

标签: java android

我使用PagedList实时数据和PositionalDataSource以mvvm模式创建信息。我尝试了类似于stackoverflow的所有可能的解决方案。它不起作用。

on下面的代码我有空指针异常:尝试在空对象引用上调用虚方法'..Item.getSelected()'

我非常小心地在Item类上设置它。

@Override
public void onBindViewHolder(PageViewAdapter.PageViewHolder holder, int position) {

    item = getItem(position);
    if (item != null) {
        holder.lineTextView.setText(String.valueOf(item));
    }

    holder.checkBox.setTag(position);
    holder.checkBox.setOnCheckedChangeListener(null);
    holder.checkBox.setChecked(item.getSelected()); 
    holder.checkBox.setOnCheckedChangeListener((compoundButton, isChecked) -> {

        if (compoundButton.isPressed()) {
         // holder.checkBox.setSelected(isChecked);
            item.setSelected(isChecked);
        }
    });
}

My Data Model as Item Class 
public class Item {
 private boolean selected = true;

public Item(String value) {
    this.value = value;
}

public void setSelected(boolean selected) {
    this.selected = selected;
}

public boolean getSelected() {
    return selected;

}
}

我在Git上的代码:https://github.com/kumarjitendra/pageViewItem

2 个答案:

答案 0 :(得分:0)

RecyclerView意味着回收视图。当它们消失在屏幕上方时,它们会在屏幕底部重复使用。这就是为什么它们中的一些仍然被检查并且它将出现"随机"。当您绑定到Recycler View Adapter中的视图时,您必须检查它。

您可能会在这里找到答案:CheckBox in RecyclerView keeps on checking different items

答案 1 :(得分:0)

由于RecyclerView会回收视图,因此您需要保存一些标识先前所选项目的信息。您可以使用数据模型保存该信息,然后使用适配器检查。