2

我嘗試在我的新應用程序中使用StaggeredGridView。一切工作正常。現在我想添加一個HeaderView和FooterView,但是這給了我以下錯誤:StaggeredGridView setAdapter addHeaderView和addFooterView之後

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) 

我設定的適配器中,有它在我的活動的OnCreate onExecute方法的AsynchTask的onPostExecute方法。 在我開始AsynchTask之前,我還在onCreateMethod中添加了Header和FooterView。我也嘗試從runOnUiThread運行它,我也通過Looper.myLooper()== Looper.getMainLooper()檢查,如果我在UI線程中。任何人提示我如何解決這個問題。

回答

1

我發現答案已經在我自己的。

這不是我一直以來的問題。這是AndroidStaggeredGrid目前的問題。 已經有一個合併的Pull-Request,但沒有上傳到maven。

我指的是那些兩次提交:

對於現在的解決方案是建立在自己的圖書館,將其發佈到私人maven回購,或者您將該項目作爲圖書館項目加入!

+0

這是固定在最新的etsy版本嗎?我的應用程序中仍然出現這種崩潰,我認爲我的代碼沒有問題。 –

+2

@MikeT我認爲還沒有。但是你可以使用現在包含在Android中的StaggeredLayoutManager和RecyclerView – mikepenz

+0

上次我使用這個slm時,我有一些奇怪的副作用,但是對於這個想法,我會檢查一下。 –

0

您是否嘗試過在您的AsyncTask的onPostExecute方法中調用adapter.notifiyDataSetChanged()?

這個順序是爲我工作:

  • 添加頁眉和頁腳視圖在onCreate方法,然後設置適配器,然後執行異步任務
  • 在你的AsyncTask的onPostExecute方法添加的所有項目到你的適配器(addAll或添加取決於SDK版本),並調用adapter.notifyDataSetChanged()
+0

謝謝。我已經嘗試過了。 我在此期間找到了答案。只要我被允許回答我自己的問題,就會發布。 – mikepenz