2011-03-07 33 views
9

Tengo una Actividad en una aplicación de tableta y quiero mostrar diferentes Fragmentos según la orientación. Pensé que la manera más fácil de hacerlo era simplemente definir dos archivos XML de diseño diferentes, uno para el paisaje y otro para el retrato. En otras palabras, tengo /layout/home.xml que se parece a esto:Diferentes fragmentos para diferentes orientaciones

<LinearLayout android:orientation="horizontal"> 
    <fragment class="com.foo.app.Frag1" android:id="frag1"/> 
    <fragment class="com.foo.app.Frag2" android:id="frag2"/> 
</LinearLayout> 

Y luego, en /layout-port/home.xml:

<LinearLayout android:orientation="vertical"> 
    <fragment class="com.foo.app.Frag2" android:id="frag2"/> 
    <fragment class="com.foo.app.Frag3" android:id="frag3"/> 
</LinearLayout> 

Cuando corro, puedo empezar en el paisaje e ir al retrato, y todo está bien. Sin embargo, cuando paso de vertical a horizontal, la aplicación se bloquea con un android.content.res.Resources $ NotFoundException con Resource ID igual a "frag3". Así es que está buscando Frag3 cuando se va a hacer paisaje, y no hay Frag3 en ese modo. Esto sucede durante la pila Activity.onCreate, por lo que antes de que mi código tenga alguna posibilidad de bloquear la aplicación.

¿No se supone que los fragmentos funcionan de esta manera? ¿Debo usar FragmentTransaction en su lugar?

+0

Este es simplemente una conjetura, pero puede ser que FragmentManager esté guardando/restaurando los fragmentos en onPause/onCreate a través del paquete savedInstanceState. Intente pasar null de forma explícita a super.onCreate() y vea si eso resuelve el bloqueo. – gngr44

+0

Intente llamar a 'setRetainInstance (falso); 'en tus fragmentos. –

+0

¿Puedes proporcionar un stacktrace? –

Respuesta

1

Es difícil de decir sin ver el código. Sin embargo, Resources.NotFoundException generalmente significa que intentó buscar un activo (piense R.layout.xx, R.drawable.xx, etc.) incorrectamente.

Dicho esto, traté de escribir una pequeña aplicación utilizando su diseño XML, y el compilador me gritó por las cadenas de codificación como las ID cuando copié en su código XML para probarlo. Trate de cambiar los valores del atributo android: id para leer así:

android: id = "android: id =" @ +/Identificación del frag1"

que podrían solucionar el problema

Cuestiones relacionadas