我有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
,这不是主意。
答案 0 :(得分:0)
为什么不使用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);
}
});