web-dev-qa-db-ja.com

java.lang.StackOverFlowエラー。ビューが多すぎると思われますか?

以下のようなエラー(Android 1.5)が発生した場合、ネストされたViewGroupが多すぎるためですか、それともビューの総数が多すぎるためですか?アプリの外観を同じに保ちながら、それを回避するためのトリックはありますか?

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)
23
synic

ネストされたレイアウトが(方法で)多すぎます。 d.Android.comの公式Androidブログをチェックして、レイアウトを最適化する方法に関するヒントとコツを入手できます。

32
Romain Guy

私の場合、私はで解決しました

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;
6
Ishtiaq

私の場合、v4サポートとHoloEverywhere v1.4ライブラリを使用して、別のフラグメント内のフラグメントビューページャー内のリストにネストされたレイアウト(複雑なリストitens)が原因でした。

ネストされたフラグメントを削除して、別の方法でビルドする必要がありました。

5
JPMagalhaes

私の場合、

カスタマイズされたリストビューには相対レイアウトがあり、Stackoverflowerrorがリリースされました。

listviewに相対レイアウトがある場合は、それを消去します:D

2
larsien

私の場合とXamarinFormsでは、CachingStrategy="RecycleElement"ListViewに追加し、余分なレイアウトを削除することで、このエラーを解決しました。
Androidユーザーは、RecyclerViewまたはその他のビューのリサイクル方法を使用する必要があります。

0
Dr TJ

私の場合、それはListView内のScrollViewであり、一番下までスクロールしようとすると。スタックオーバーフローエラーが発生します。

したがって、ListViewScrollView内に含めることは避けてください。

または、別のアプローチを使用してListViewを実装することもできます。

スクロールビュー内のAndroidリストビュー

0
Vinit Siriah

この場合、ListViewsを使用したXamarinフォームでは問題が解決せず、カルーセルで例外が発生し続けました。また、必要なNControlでペイントされた一部のグラフィックでは許可されないため、別のスレッドからdrawメソッドを呼び出すことはできません。それを行うには(OpenGL関連だと思います)。したがって、最終的には、カルーセルカスタムレンダラーで例外をキャッチし、Invalidate()を呼び出すだけで問題が解決しました。