23

当你遇到如下错误(Android 1.5)时,是因为嵌套的 ViewGroup 太多,还是因为 View 的总数太大?是否有任何技巧可以绕过它,同时仍然保持您的应用程序相同的外观?

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)
4

7 回答 7

32

你有(方式)太多的嵌套布局。您可以查看 d.android.com 上的官方 Android 博客,以获取有关如何优化布局的提示和技巧。

于 2010-05-04T16:38:40.810 回答
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;
于 2015-09-07T06:49:27.260 回答
5

在我的情况下,它是由另一个片段内的片段视图分页器内的列表中的嵌套布局(复杂列表项)引起的,使用 v4 支持和 HoloEverywhere v1.4 库。

我不得不移除嵌套的片段并以不同的方式构建它。

于 2012-12-05T15:01:48.370 回答
2

就我而言,

自定义列表视图有相对布局,然后发布Stackoverflowerror

如果您listview有相对布局,则将其删除:D

于 2011-07-11T13:41:31.887 回答
0

在我的情况下,它ListView在 a 内ScrollView,当我尝试将其滚动到底部时。它会产生堆栈溢出错误。

所以,避免有ListView里面ScrollView

或者我们可以使用不同的方法来实现 ListView。

滚动视图中的 Android 列表视图

于 2014-01-01T17:14:34.583 回答
0

CachingStrategy="RecycleElement"就我而言,在 XamarinForms 中,我通过添加ListView和删除额外的布局解决了这个错误。
Android 用户应该使用RecyclerView或其他视图回收方法。

于 2016-08-09T15:01:18.440 回答
0

对于我们使用 ListViews 的案例中的 Xamarin Forms 并没有解决问题,在我们拥有的轮播上不断出现异常,并且我们不能从另一个线程调用 draw 方法,因为我们需要的一些用 NControl 绘制的图形不允许我们做到这一点(我猜与OpenGL相关)。因此,最后只需在我们的轮播自定义渲染器中捕获异常并在其上调用 Invalidate() 即可解决问题。

于 2016-11-03T09:35:38.077 回答