【发布时间】:2019-09-05 06:39:41
【问题描述】:
phonebooster.get(position).setSelected(isChecked);
ArrayList<CacheDataModel> cacheDataModels=new ArrayList<>();
cacheDataModels.addAll(phonebooster);
phonebooster.clear();
phonebooster.addAll(cacheDataModels);
notifyDataSetChanged();
查看错误
java.lang.IllegalStateException: Cannot call this method while RecyclerView is computing a layout or scrolling android.support.v7.widget.RecyclerView{fdff32c VFED..... ......ID 0,86-720,508 #7f080126 app:id/recyclerView}, adapter:com.example.cleanerandroid.adapter.AppAdapter@e7a21f5, layout:android.support.v7.widget.LinearLayoutManager@8d74b8a, context:com.example.cleanerandroid.activity.PhoneBooster@68f63c3
at android.support.v7.widget.RecyclerView.assertNotInLayoutOrScroll(RecyclerView.java:2880)
at android.support.v7.widget.RecyclerView$RecyclerViewDataObserver.onChanged(RecyclerView.java:5281)
at android.support.v7.widget.RecyclerView$AdapterDataObservable.notifyChanged(RecyclerView.java:11997)
at android.support.v7.widget.RecyclerView$Adapter.notifyDataSetChanged(RecyclerView.java:7070)
at com.example.cleanerandroid.adapter.AppAdapter$1$1.run(AppAdapter.java:67)
at android.app.Activity.runOnUiThread(Activity.java:6406)
at com.example.cleanerandroid.adapter.AppAdapter$1.onCheckedChanged(AppAdapter.java:64)
at android.widget.CompoundButton.setChecked(CompoundButton.java:182)
at com.example.cleanerandroid.adapter.AppAdapter.onBindViewHolder(AppAdapter.java:75)
at com.example.cleanerandroid.adapter.AppAdapter.onBindViewHolder(AppAdapter.java: 32)
我在 recycleview 中有复选框,每当我尝试检查多个复选框(请参阅下面的代码)时,它都会给我错误(请参阅错误日志)。
【问题讨论】:
-
你不能在
onBindViewHolder()中调用notifyDataSetChanged();,这就是你得到IllegalStateException的原因。从 Fragment/Activity 调用adapter.notifyDataSetChanged();