我有一个RecyclerView
物品,它们都有一个checkbox
。关键是你只能将一个checkbox
设置为checked
(类似于收藏夹(。一切正常,直到有足够的项目需要滚动RecyclerView
。但是,当有足够的项目可以滚动时,该项目的某些名称就会消失,除了一个之外,checkboxes
都不起作用,并且全部卡住了。另外,我得到以下异常:
"Cannot call this method while RecyclerView is computing a layout or scrolling"
这就是我正在做的:
holder.getBinder().cbIsFavourite.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (mListener == null) {
return;
}
if (isChecked) {
for (Peem peemTmp : mPeemList) {
if (peemTmp.isFavourite()) {
peemTmp.setFavourite(false);
}
}
peem.setFavourite(true);
PeemAdapter.this.notifyDataSetChanged();
} else {
peem.setFavourite(false);
removeFavouriteShops(peem);
}
mListener.onFavouriteChecked(peem);
}
});
错误发生在此行PeemAdapter.this.notifyDataSetChanged();
如果我删除该行,一切都没问题,但是可以选择多个checkboxes
,这不是这个想法。
为什么不使用 RadioButton 和 RadioGroup ?
否则尝试在 Runnable 帖子中调用 notifyDataSetChanged((,它将在布局计算后调用。像这样:
myView.post(new Runnable() {
@Override
public void run() {
notifyDataSetChanged();
}
});
编辑:
holder.getBinder().cbIsFavourite.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (mListener == null) {
return;
}
if (isChecked) {
for (Peem peemTmp : mPeemList) {
if (peemTmp.isFavourite()) {
peemTmp.setFavourite(false);
}
}
peem.setFavourite(true);
holder.getBinder().cbIsFavourite.post(new Runnable() {
@Override
public void run() {
PeemAdapter.this.notifyDataSetChanged();
}
});
} else {
peem.setFavourite(false);
removeFavouriteShops(peem);
}
mListener.onFavouriteChecked(peem);
}
});