2012-02-07 8 views
7

Acabo de ir al mercado android para publicar una actualización de mi aplicación y noté que hay algunos errores nuevos informados en las instalaciones existentes. Aunque puedo entender (y tratar de hacer algo al respecto) la mayoría de ellos, éste me deja bastante perplejo:Android StackOverflowError en ViewGroup.resetResolvedTextDirection

java.lang.StackOverflowError 
at android.view.ViewGroup.resetResolvedTextDirection(ViewGroup.java:5131) 
at android.view.ViewGroup.resetResolvedTextDirection(ViewGroup.java:5131) 
at android.view.ViewGroup.resetResolvedTextDirection(ViewGroup.java:5131) 
at android.view.ViewGroup.resetResolvedTextDirection(ViewGroup.java:5131) 
at android.view.ViewGroup.resetResolvedTextDirection(ViewGroup.java:5131) 
at android.view.ViewGroup.resetResolvedTextDirection(ViewGroup.java:5131) 
... this line repeats about 200 times or so ... 

Esto es todo lo que hay - no hay otra información de cualquier tipo.

Estoy totalmente perplejo en cuanto a dónde empezar a investigar esto. Cualquier idea es muy apreciada.

Respuesta

1

He rastreado el problema. Me parece un error en Android, que se exhibe cuando el visibility de una Vista se establece explícitamente en VISIBLE, pero la vista en sí y el elemento primario de la vista no se agrega a la vista principal.

Finalmente resolví el problema agregando el ListView en cuestión a XML en lugar de crearlo en el código y mover el código setVisibility(View.VISIBLE) a después de que toda la vista se agrega a la vista principal (es decir, se puede rastrear la jerarquía principal de cada niño todo el camino hasta el comienzo).

Al menos ya no me aparece este error.

10

Parece ser un método agregado en ICS, por lo que tiene 4.0 y más. Mirando the code parece que tiene algún tipo de bucle de vista en su jerarquía ya que es aparentemente la línea child.resetResolvedTextDirection(); lo está haciendo. En otras palabras, una de sus clases ViewGroup en su diseño de alguna manera se ha agregado como un niño a sí mismo en algún lugar en la línea.

+0

veo. Estoy bastante seguro de que una vista no se puede agregar a sí misma (directa o indirectamente) como un niño; de lo contrario, se producirían todo tipo de problemas. Trataré de obtener el simulador de ics e intentaré ejecutar el depurador allí; quizás pueda encontrar el problema. –

+0

Sí, hay un cheque de "padre" que pensaría que lo evitaría. Pero no puedo explicar un ciclo recursivo de ninguna otra manera. A menos que no sea recursivo y tu jerarquía de vistas sea realmente tan profunda. –

1

El problema es cuando se infla la vista de manera que inflater.inflate(R.layout.view_topic, this); y el elemento principal de esta vista todavía no está visible/renderizado en el escenario.

Asegúrese de que la procesa después de que el padre es visible o llame

View child = inflater.inflate(R.layout.view_topic, null); // null will give warning but it wont throw an exception 
     this.addView(child);