1

enter image description hereon click on list

  phonebooster.get(position).setSelected(isChecked);
            ArrayList<CacheDataModel> cacheDataModels=new ArrayList<>();
            cacheDataModels.addAll(phonebooster);
            phonebooster.clear();
            phonebooster.addAll(cacheDataModels);
            notifyDataSetChanged();

see error

 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)

I have checkboxes in recycleview and whenever I try to check multiple checkboxes(refer below code) it gives me error (refer error log).

Ashish Virani
  • 182
  • 1
  • 15
  • You cannot call `notifyDataSetChanged();` inside `onBindViewHolder()` that's why you're getting `IllegalStateException`. Call `adapter.notifyDataSetChanged();` from Fragment/Activity – Farid Sep 05 '19 at 06:50

1 Answers1

0

Try this one

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();
        }
    });
  • This will throw the same exception if you calling it from `onBindViewHolder()` – Farid Sep 05 '19 at 06:51
  • put holder.mLinearParent.setTag(position); above setOnClickListener. – Auxano Services Sep 05 '19 at 06:53
  • I'm not asking for clarification, I'm saying your answer is not valid. OP is calling `onBindViewHolder()` inside `onBindViewHolder()` that's why they're getting `IllegalStateException`. But you're suggesting a totally unrelated answer. – Farid Sep 05 '19 at 06:57
  • it's working perfectly thanks. @AuxanoServices – Ashish Virani Sep 05 '19 at 07:03