This question already has answers here:
Android RecyclerView : notifyDataSetChanged() IllegalStateException
(21个回答)
在4个月前关闭。
点击列表
看到错误
我在recycleview中有复选框,每当我尝试检查多个复选框(请参阅下面的代码)时,它都会给我错误(请参阅错误日志)。
(21个回答)
在4个月前关闭。
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中有复选框,每当我尝试检查多个复选框(请参阅下面的代码)时,它都会给我错误(请参阅错误日志)。
最佳答案
试试这个
holder.mLinearParent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (List.get(position).isSelected()) {
List.get(position).setSelected(false);
} else {
List.get(position).setSelected(true);
}
notifyDataSetChanged();
}
});