Frage

Wenn Sie einen Fehler wie unten (Android 1.5) zu bekommen, ist es, weil es zu viele verschachtelte ViewGroups sind, oder weil die Gesamtzahl der Ansichten ist zu groß? Gibt es irgendwelche Tricks, um es zu bekommen, während immer noch das gleiche Aussehen, um Ihre Anwendung zu halten?

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)
War es hilfreich?

Lösung

Sie haben (Art und Weise) zu viele verschachtelte Layouts. Sie können das offizielle Android-Blog unter d.android.com auschecken, um Tipps und Tricks, wie man optimieren Layouts zu erhalten.

Andere Tipps

in meinem Fall gelöst ich in

onCreateView

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

durch Zugabe von attachToRoot Parameter

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

In meinem Fall ist es durch verschachtelte Layouts verursacht wurde (komplexe Liste itens) in einer Liste innerhalb einer Fragmentsicht Pager in einer anderen Fragmente , mit v4 Unterstützung und HoloEverywhere v1.4 Bibliotheken.

Ich hatte verschachtelte Fragmente zu entfernen und es in einer anderen Art und Weise zu bauen.

In meinem Fall

Customized Listenansicht Relative-Layout hat, dann freigegeben es Stackoverflowerror.

Wenn Ihr listview relativ Layout hat, dann löschen sie: D

In meinem Fall, dass ListView in einem ScrollView war und wenn ich versuche zu scrollen sie nach unten. Es produziert Stackoverflow-Fehler.

So vermeiden ListView innen ScrollView zu haben.

Oder wir können anderen Ansatz verwenden Listview zu implementieren.

Android Listenansicht in einer Scroll-Ansicht

In meinem Fall und in XamarinForms, löste ich diesen Fehler durch CachingStrategy="RecycleElement" meinen ListView Hinzufügen und auch zusätzliche Layouts zu entfernen.
Android-Nutzer RecyclerView oder andere Ansicht Recycling-Methoden verwenden sollten.

Für Xamarin Formulare in unserem Fall Listviews verwenden das Problem nicht lösen, wird die Ausnahme auf einem Karussell gehalten heben wir haben, und wir können die Streck-Verfahren von einem anderen Thread nicht aufrufen, da einige Grafiken mit NControl gemalt Wir brauchen doesn‘ t erlauben uns, das zu tun (OpenGL Zusammenhang glaube ich). Also am Ende nur die Ausnahme in unserem Karussell benutzerdefinierten Renderer Fang und rief Invalidate () auf es das Problem behoben.

Tage haben sich geändert Verwendung Constrain Layout, eine einzige Einschränkung Layout kann Ihrer Ansicht Hierarchie flach

Zur Kasse: https://developer.android.com/training/constraint-layout

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top