{"id":369,"date":"2013-11-16T20:10:54","date_gmt":"2013-11-17T01:10:54","guid":{"rendered":"http:\/\/www.compdigitec.com\/labs\/?p=369"},"modified":"2013-11-16T20:18:10","modified_gmt":"2013-11-17T01:18:10","slug":"fixing-illegalstateexception-the-content-of-the-adapter-has-changed-but-listview-did-not-receive-a-notification","status":"publish","type":"post","link":"http:\/\/www.compdigitec.com\/labs\/2013\/11\/16\/fixing-illegalstateexception-the-content-of-the-adapter-has-changed-but-listview-did-not-receive-a-notification\/","title":{"rendered":"Fixing IllegalStateException: The content of the adapter has changed but ListView did not receive a notification"},"content":{"rendered":"<p>Recently while working with a custom BaseAdapter in ListView, I came across this error:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nE\/InputEventReceiver(30380): Exception dispatching input event.\r\nE\/MessageQueue-JNI(30380): Exception in MessageQueue callback: handleReceiveCallback\r\nE\/MessageQueue-JNI(30380): java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(2131230721, class android.widget.ListView) with Adapter(class com.compdigitec.libvlcandroidsample.DirectoryAdapter)]\r\nE\/MessageQueue-JNI(30380): \tat android.widget.ListView.layoutChildren(ListView.java:1544)\r\nE\/MessageQueue-JNI(30380): \tat android.widget.AbsListView.onTouchEvent(AbsListView.java:3403)\r\nE\/MessageQueue-JNI(30380): \tat android.view.View.dispatchTouchEvent(View.java:7239)\r\nE\/MessageQueue-JNI(30380): \tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2168)\r\nE\/MessageQueue-JNI(30380): \tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1903)\r\nE\/MessageQueue-JNI(30380): \tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)\r\nE\/MessageQueue-JNI(30380): \tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)\r\nE\/MessageQueue-JNI(30380): \tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)\r\nE\/MessageQueue-JNI(30380): \tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)\r\nE\/MessageQueue-JNI(30380): \tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)\r\nE\/MessageQueue-JNI(30380): \tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)\r\nE\/MessageQueue-JNI(30380): \tat android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)\r\nE\/MessageQueue-JNI(30380): \tat android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)\r\nE\/MessageQueue-JNI(30380): \tat com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1953)\r\nE\/MessageQueue-JNI(30380): \tat com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1405)\r\nE\/MessageQueue-JNI(30380): \tat android.app.Activity.dispatchTouchEvent(Activity.java:2410)\r\nE\/MessageQueue-JNI(30380): \tat com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1901)\r\nE\/MessageQueue-JNI(30380): \tat android.view.View.dispatchPointerEvent(View.java:7419)\r\nE\/MessageQueue-JNI(30380): \tat android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3220)\r\nE\/MessageQueue-JNI(30380): \tat android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3165)\r\nE\/MessageQueue-JNI(30380): \tat android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4292)\r\nE\/MessageQueue-JNI(30380): \tat android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4271)\r\nE\/MessageQueue-JNI(30380): \tat android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4363)\r\nE\/MessageQueue-JNI(30380): \tat android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:179)\r\nE\/MessageQueue-JNI(30380): \tat android.os.MessageQueue.nativePollOnce(Native Method)\r\nE\/MessageQueue-JNI(30380): \tat android.os.MessageQueue.next(MessageQueue.java:125)\r\nE\/MessageQueue-JNI(30380): \tat android.os.Looper.loop(Looper.java:124)\r\nE\/MessageQueue-JNI(30380): \tat android.app.ActivityThread.main(ActivityThread.java:5191)\r\nE\/MessageQueue-JNI(30380): \tat java.lang.reflect.Method.invokeNative(Native Method)\r\nE\/MessageQueue-JNI(30380): \tat java.lang.reflect.Method.invoke(Method.java:511)\r\nE\/MessageQueue-JNI(30380): \tat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)\r\nE\/MessageQueue-JNI(30380): \tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)\r\nE\/MessageQueue-JNI(30380): \tat dalvik.system.NativeStart.main(Native Method)\r\n<\/pre>\n<p>this.notifyDataSetChanged() was already being called, so that couldn&#8217;t have been the problem.<\/p>\n<p><b>The solution?<\/b><br \/>\nIf registerDataSetObserver() and unregisterDataSetObserver() are going to be overridden, ensure that the superclass&#8217; methods are being called too. If you forget to call them, then when Android registers the ListView dataset observer, nothing is going to happen.<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\n    @Override\r\n    public void registerDataSetObserver(DataSetObserver arg0) {\r\n        \/\/ ...stuff\r\n        super.registerDataSetObserver(arg0);\r\n    }\r\n\r\n    @Override\r\n    public void unregisterDataSetObserver(DataSetObserver arg0) {\r\n        \/\/ ...stuff\r\n        super.unregisterDataSetObserver(arg0);\r\n    }\r\n<\/pre>","protected":false},"excerpt":{"rendered":"<p>Recently while working with a custom BaseAdapter in ListView, I came across this error: this.notifyDataSetChanged() was already being called, so that couldn&#8217;t have been the problem. The solution? If registerDataSetObserver() and unregisterDataSetObserver() are going to be overridden, ensure that the superclass&#8217; methods are being called too. If you forget to call them, then when Android [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[759],"tags":[760,836,674,835],"_links":{"self":[{"href":"http:\/\/www.compdigitec.com\/labs\/wp-json\/wp\/v2\/posts\/369"}],"collection":[{"href":"http:\/\/www.compdigitec.com\/labs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.compdigitec.com\/labs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.compdigitec.com\/labs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.compdigitec.com\/labs\/wp-json\/wp\/v2\/comments?post=369"}],"version-history":[{"count":0,"href":"http:\/\/www.compdigitec.com\/labs\/wp-json\/wp\/v2\/posts\/369\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.compdigitec.com\/labs\/wp-json\/wp\/v2\/media?parent=369"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.compdigitec.com\/labs\/wp-json\/wp\/v2\/categories?post=369"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.compdigitec.com\/labs\/wp-json\/wp\/v2\/tags?post=369"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}