java.lang.StackOverFlow错误。 怀疑太多的意见?

当你得到一个如下所示的错误(Android 1.5)时,是因为嵌套的ViewGroups太多了,还是因为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) 

Solutions Collecting From Web of "java.lang.StackOverFlow错误。 怀疑太多的意见?"

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

在我的情况下,我通过解决

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; 

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

我不得不删除嵌套的片段,并以不同的方式构build它。

就我而言,

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

如果你的listview有相对的布局,然后擦除它:D

在我的情况下,这是一个ScrollView里面的ListView ,当我尝试将其滚动到底部。 它会产生stackoverflow错误。

所以,避免在ScrollView里面有ListView

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

滚动视图中的Android列表视图

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

对于Xamarin在我们使用ListView的情况下,表单不能解决问题,exception一直在我们所拥有的轮播中引发,而且我们不能从另一个线程调用draw方法,因为我们所需要的一些用NControl绘制的graphics不允许我们要做到这一点(OpenGL相关我猜)。 所以最后只是捕捉我们的轮播自定义渲染器中的exception,并调用Invalidate()解决了这个问题。