Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot change whether this adapter has stable IDs while the adapter has registered observers

I am using RecyclerView in my android project and its performance has been really awful. From the answers here, I tried adding adapter.setHasStableIds(true); to my code. When running, I got an error:

java.lang.IllegalStateException: Cannot change whether this adapter has stable IDs while the adapter has registered observers. 

My full logCat is as below;

09-22 22:22:23.634 1808-1808/com.revosleap.movielist E/AndroidRuntime: FATAL EXCEPTION: main Process: com.revosleap.movielist, PID: 1808 java.lang.IllegalStateException: Cannot change whether this adapter has stable IDs while the adapter has registered observers.     at android.support.v7.widget.RecyclerView$Adapter.setHasStableIds(RecyclerView.java:6749)     at com.revosleap.movielist.Utils.UrlUtils.GenreFetcher.getGenre(GenreFetcher.java:48)     at com.revosleap.movielist.MainActivity$2.onItemSelected(MainActivity.java:221)     at android.widget.AdapterView.fireOnSelected(AdapterView.java:1124)     at android.widget.AdapterView.access$200(AdapterView.java:54)     at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:1089)     at android.os.Handler.handleCallback(Handler.java:739)     at android.os.Handler.dispatchMessage(Handler.java:95)     at android.os.Looper.loop(Looper.java:145)     at android.app.ActivityThread.main(ActivityThread.java:5942)     at java.lang.reflect.Method.invoke(Native Method)     at java.lang.reflect.Method.invoke(Method.java:372)     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400)     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195) 

How can I fix this please?

like image 726
Carlos Anyona Avatar asked Sep 22 '18 19:09

Carlos Anyona


1 Answers

You must set the adapter's hasStableIds to true BEFORE you assign the adapter to your recyclerview.

YourAdapter adapter = new YourAdapter(); adapter.setHasStableIds(true); myRecyclerView.setAdapter(adapter); 
like image 150
iqbalzas Avatar answered Sep 17 '22 07:09

iqbalzas



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!