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?
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With