以下のようなエラー(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)
ネストされたレイアウトが(方法で)多すぎます。 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;
私の場合、v4サポートとHoloEverywhere v1.4ライブラリを使用して、別のフラグメント内のフラグメントビューページャー内のリストにネストされたレイアウト(複雑なリストitens)が原因でした。
ネストされたフラグメントを削除して、別の方法でビルドする必要がありました。
私の場合、
カスタマイズされたリストビューには相対レイアウトがあり、Stackoverflowerror
がリリースされました。
listview
に相対レイアウトがある場合は、それを消去します:D
私の場合とXamarinFormsでは、CachingStrategy="RecycleElement"
をListView
に追加し、余分なレイアウトを削除することで、このエラーを解決しました。
Androidユーザーは、RecyclerView
またはその他のビューのリサイクル方法を使用する必要があります。
私の場合、それはListView
内のScrollView
であり、一番下までスクロールしようとすると。スタックオーバーフローエラーが発生します。
したがって、ListView
をScrollView
内に含めることは避けてください。
または、別のアプローチを使用してListViewを実装することもできます。
この場合、ListViewsを使用したXamarinフォームでは問題が解決せず、カルーセルで例外が発生し続けました。また、必要なNControlでペイントされた一部のグラフィックでは許可されないため、別のスレッドからdrawメソッドを呼び出すことはできません。それを行うには(OpenGL関連だと思います)。したがって、最終的には、カルーセルカスタムレンダラーで例外をキャッチし、Invalidate()を呼び出すだけで問題が解決しました。