This question already has answers here:
Android RecyclerView : notifyDataSetChanged() IllegalStateException
                                
                                    (21个回答)
                                
                        
                                在4个月前关闭。
            
                    
java - 在RecyclerView listview中选中多个复选框,但使用notifyDataSetChanged刷新列表,但无法正常工作-LMLPHP点击列表

  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();
        }
    });

07-24 09:47
查看更多