我知道recyclerview类中没有默认的选择方法,但是我尝试了以下方法,
public void onBindViewHolder(ViewHolder holder, final int position) {
holder.mTextView.setText(fonts.get(position).getName());
holder.checkBox.setChecked(fonts.get(position).isSelected());
holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked) {
for (int i = 0; i < fonts.size(); i++) {
fonts.get(i).setSelected(false);
}
fonts.get(position).setSelected(isChecked);
}
}
});
}
在尝试这段代码时,我得到了预期的输出,但是完全没有。
我将用图像对此进行解释。
默认情况下,从我的适配器中选择第一项
然后,我尝试选择第2个,然后选择第3个,然后选择第4个,最后选择第5个,
在这里,应该只选择第5个,但是全部五个都被选中。
如果我将列表滚动到底部然后再回到顶部,
我达到了我的期望,
我该如何克服这个问题?还有一段时间,如果我快速滚动列表,则会选择其他项目。如何克服这个问题呢?
更新资料
在遵循以下异常notifyDataSetChanged()
后尝试使用时fonts.get(position).setSelected(isChecked);
,
java.lang.IllegalStateException: Cannot call this method while RecyclerView is computing a layout or scrolling
at android.support.v7.widget.RecyclerView.assertNotInLayoutOrScroll(RecyclerView.java:1462)
at android.support.v7.widget.RecyclerView$RecyclerViewDataObserver.onChanged(RecyclerView.java:2982)
at android.support.v7.widget.RecyclerView$AdapterDataObservable.notifyChanged(RecyclerView.java:7493)
at android.support.v7.widget.RecyclerView$Adapter.notifyDataSetChanged(RecyclerView.java:4338)
at com.app.myapp.screens.RecycleAdapter.onRowSelect(RecycleAdapter.java:111)