【发布时间】:2015-01-20 02:55:30
【问题描述】:
我正在尝试使用 notifyDataSetChanged() 更新回收视图的项目。
这是我在 recycleview 适配器中的 onBindViewHolder() 方法。
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
//checkbox view listener
viewHolder.getCheckbox().setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//update list items
notifyDataSetChanged();
}
});
}
我想要做的是在我选中一个复选框后更新列表项。我得到一个非法异常:"Cannot call this method while RecyclerView is computing a layout or scrolling"
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)
我也使用了 notifyItemChanged(),同样的例外。有什么秘密方法可以更新以通知适配器发生了变化?
【问题讨论】:
-
我现在遇到了同样的问题。将 setoncheckchanged 侦听器放在 viewholder 构造函数中会给我同样的错误
标签: android android-recyclerview