Error java.lang.StackOverFlow. ¿Se sospecha de demasiadas opiniones?

Cuando obtienes un error como el de abajo (Android 1.5), ¿es porque hay demasiados grupos de vistas anidados o porque el número total de vistas es demasiado grande? ¿Hay algunos trucos para evitarlo y mantener la misma apariencia en tu aplicación?

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) 

Usted tiene (camino) demasiados diseños anidados. Puedes consultar el blog oficial de Android en d.android.com para obtener consejos y trucos sobre cómo optimizar los diseños.

En mi caso fue causado por layouts anidados (lista compleja) en una lista dentro de un paginador de vista de fragmento dentro de otro fragmento , usando soporte v4 y bibliotecas HoloEverywhere v1.4.

Tuve que eliminar fragmentos anidados y construir de una manera diferente.

En mi caso he resuelto en

OnCreateView

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

Mediante la adición de parámetro attachToRoot

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

En mi caso,

La vista de lista personalizada tiene Disposición relativa y, a continuación, publicó Stackoverflowerror .

Si su listview tiene un diseño relativo, entonces borrarlo: D

En mi caso que era ListView dentro de un ScrollView y cuando trato de desplazarte hacia abajo. Produce error stackoverflow.

Por lo tanto, evite tener ListView dentro de ScrollView .

O podemos utilizar un enfoque diferente para implementar ListView.

Vista de lista de Android dentro de una vista de desplazamiento

En mi caso y en XamarinForms, solucioné este error agregando CachingStrategy="RecycleElement" a mi ListView y también eliminando diseños adicionales.
Los usuarios de Android deben usar RecyclerView u otros métodos de reciclaje de vistas.

Para Xamarin Forms en nuestro caso usando ListViews no resolvió el problema, la excepción se mantuvo levantando en un carrusel que tenemos, y no podemos llamar al método draw de otro hilo porque algunos gráficos pintados con NControl que necesitamos no nos permiten Para hacer eso (OpenGL relacionados, supongo). Así que al final sólo capturar la excepción en nuestro procesador personalizado carrusel y llamar a Invalidate () en él resolvió el problema.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.