Question

I try to use StaggeredGridView in my new applicaiton. Everything is working fine. Now i want to add a HeaderView and a FooterView, but this gives me following error:

java.lang.IllegalStateException: The content of the adapter has changed but ExtendableListView 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 ExtendableListView(2131165194, class com.tundem.numbersreloaded.view.NumbersGridView) with Adapter(class com.etsy.android.grid.HeaderViewListAdapter)]
            at com.etsy.android.grid.ExtendableListView.layoutChildren(ExtendableListView.java:557)
            at com.etsy.android.grid.StaggeredGridView.layoutChildren(StaggeredGridView.java:358)
            at com.etsy.android.grid.ExtendableListView.onLayout(ExtendableListView.java:513)
            at android.view.View.layout(View.java:14817)
            at android.view.ViewGroup.layout(ViewGroup.java:4631)
            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
            at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
            at android.view.View.layout(View.java:14817)
            at android.view.ViewGroup.layout(ViewGroup.java:4631)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
            at android.view.View.layout(View.java:14817)
            at android.view.ViewGroup.layout(ViewGroup.java:4631)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
            at android.view.View.layout(View.java:14817)
            at android.view.ViewGroup.layout(ViewGroup.java:4631)
            at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:374)
            at android.view.View.layout(View.java:14817)
            at android.view.ViewGroup.layout(ViewGroup.java:4631)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
            at android.view.View.layout(View.java:14817)
            at android.view.ViewGroup.layout(ViewGroup.java:4631)
            at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1987)
            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1744)
            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670)
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
            at android.view.Choreographer.doCallbacks(Choreographer.java:574)
            at android.view.Choreographer.doFrame(Choreographer.java:544)
            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5017)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method)

I set the Adapter in the onPostExecute method of an AsynchTask which has it's onExecute method in the onCreate of my Activity. I also add the Header and FooterView in the onCreateMethod before i start the AsynchTask.

I've also tried to run it from the runOnUiThread and i've also checked via Looper.myLooper() == Looper.getMainLooper() if i'm in the UI Thread. Anyone with hints how i can solve this issue.

Was it helpful?

Solution

I found the answer already on my own.

It was not my issue i had all the time. It's a issue the AndroidStaggeredGrid currently has. There's already a merged Pull-Request with a fix but it was no uploaded to maven yet.

I refer to those two commits:

For now the solution is to build the library on your own and publish it to a private maven repo, or you include the project as library project!

OTHER TIPS

Have you tried calling adapter.notifiyDataSetChanged() in the onPostExecute method of your AsyncTask?

This order is working for me:

  • Add header and footer view in your onCreate method, then set the adapter, then execute Async Task
  • In the onPostExecute method of your AsyncTask you add all items to your adapter (addAll or add depending on SDK Version) and call adapter.notifyDataSetChanged()
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top