2010-05-04 77 views
23

當你得到如下的錯誤(Android 1.5)時,是否因爲嵌套的ViewGroups太多,或者視圖的總數太多?有沒有什麼竅門可以解決它,同時仍然保持對你的應用程序相同的外觀?java.lang.StackOverFlow錯誤。懷疑太多意見?

java.lang.StackOverflowError 
    at android.text.Styled.measureText(Styled.java:371) 
    at android.text.Layout.measureText(Layout.java:1600) 
    at android.text.Layout.getLineMax(Layout.java:654) 
    at android.text.Layout.draw(Layout.java:310) 
    at android.text.BoringLayout.draw(BoringLayout.java:356) 
    at android.widget.TextView.onDraw(TextView.java:3921) 
    at android.view.View.draw(View.java:5838) 
    at android.view.ViewGroup.drawChild(ViewGroup.java:1486) 
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228) 
    at android.view.ViewGroup.drawChild(ViewGroup.java:1484) 
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228) 
    at android.widget.AbsListView.dispatchDraw(AbsListView.java:1319) 
    at android.widget.ListView.dispatchDraw(ListView.java:2820) 
    at android.view.View.draw(View.java:5944) 
    at android.widget.AbsListView.draw(AbsListView.java:2121) 
    at android.view.ViewGroup.drawChild(ViewGroup.java:1486) 
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228) 
    at android.view.ViewGroup.drawChild(ViewGroup.java:1484) 
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228) 
    at android.view.View.draw(View.java:5841) 
    at android.widget.FrameLayout.draw(FrameLayout.java:352) 
    at android.view.ViewGroup.drawChild(ViewGroup.java:1486) 
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228) 
    at android.view.ViewGroup.drawChild(ViewGroup.java:1484) 
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228) 
    at android.view.View.draw(View.java:5841) 
    at android.widget.FrameLayout.draw(FrameLayout.java:352) 
    at android.view.ViewGroup.drawChild(ViewGroup.java:1486) 
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228) 
    at android.view.View.draw(View.java:5841) 
    at android.view.ViewGroup.drawChild(ViewGroup.java:1486) 
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228) 
    at android.view.View.draw(View.java:5841) 
    at android.view.ViewGroup.drawChild(ViewGroup.java:1486) 
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228) 
    at android.view.View.draw(View.java:5841) 
    at android.widget.FrameLayout.draw(FrameLayout.java:352) 
    at android.view.ViewGroup.drawChild(ViewGroup.java:1486) 
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228) 
    at android.view.ViewGroup.drawChild(ViewGroup.java:1484) 
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228) 
    at android.view.ViewGroup.drawChild(ViewGroup.java:1484) 
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228) 
    at android.view.View.draw(View.java:5841) 
    at android.widget.FrameLayout.draw(FrameLayout.java:352) 
    at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1847) 
    at android.view.ViewRoot.draw(ViewRoot.java:1217) 
    at android.view.ViewRoot.performTraversals(ViewRoot.java:1030) 
    at android.view.ViewRoot.handleMessage(ViewRoot.java:1482) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:123) 
    at android.app.ActivityThread.main(ActivityThread.java:3948) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:521) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) 
    at dalvik.system.NativeStart.main(Native Method) 
+0

哎這個問題的解決辦法是什麼? @synic – Venkat 2013-06-07 11:09:05

+0

這個問題的解決方案是什麼.... – NagarjunaReddy 2013-08-20 10:45:29

回答

32

你有(太多)嵌套佈局。您可以在d.android.com上查看官方Android博客,獲取有關如何優化佈局的提示和技巧。

+1

通過用相對替換你的佈局來展平你的視圖層次結構。 Romain在這裏建議的文章系列:http://android-developers.blogspot.com/search/label/Optimization – 2010-05-04 16:43:58

+44

問題是:多少太多?有記錄嗎? – neteinstein 2012-03-30 14:28:43

+1

更新:有關可能的參考值的信息:http://stackoverflow.com/questions/9946368/stackoverflow-caused-by-nested-views – neteinstein 2014-01-23 12:17:25

2

在我的情況下,

自定義列表視圖具有相對佈局,然後將其釋放Stackoverflowerror

如果您listview具有相對佈局,然後刪除它:d

+1

在我的情況下,這爲我做了。在片段視圖分頁器內部,在片段視圖分頁器中使用ListView和RelativeLayout會導致API <14上的崩潰。重新使用ListLayout佈局的RelativeLayout取得了訣竅(性能也好得多)。 – dell116 2015-01-13 18:59:56

5

在我來說,它是由嵌套佈局(複雜的列表itens)另一個片段內片段視圖尋呼機內引起了一個列表,使用V4支持和HoloEverywhere v1.4庫。

我不得不刪除嵌套的片段,並以不同的方式構建它。

0

在我的情況下,這是ListViewScrollView和當我嘗試將其滾動到底部。它會產生stackoverflow錯誤。

因此,避免在ScrollView裏面有ListView

或者我們可以使用不同的方法來實現ListView。

Android list view inside a scroll view

6
在我的情況

onCreateView

 rootView = inflater.inflate(R.layout.fragment_interest_list, container); 
     return rootView; 

解決通過添加attachToRoot參數

  rootView = inflater.inflate(R.layout.fragment_interest_list,container,false); 
     return rootView; 
+0

在我的情況下,這並沒有工作,我不得不改變它inflater.inflate(R.layout.some_layout,null) – vanomart 2015-12-10 14:39:43

+0

在我的情況,我以前有:rootView = inflater.inflate(R.layout.fragment_layout,容器,真);我將它設置爲:rootView = inflater.inflate(R.layout.fragment_layout,container,false),瞧!有效。 – 2016-03-12 11:21:11

0

在我的情況和XamarinForms中,我通過將CachingStrategy="RecycleElement"添加到我的ListView並解除了額外的佈局來解決了這個錯誤。
Android用戶應該使用RecyclerView或其他視圖回收方法。

0

對於我們使用ListView的情況下的Xamarin沒有解決問題,異常一直在我們有的輪播中引發,並且我們不能從另一個線程調用draw方法,因爲我們需要使用NControl繪製一些圖形。不允許我們這樣做(我估計OpenGL相關)。所以最後只需在我們的Carousel自定義渲染器中捕獲異常並調用Invalidate()就可以解決問題。