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?
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
Intente llamar a 'setRetainInstance (falso); 'en tus fragmentos. –
¿Puedes proporcionar un stacktrace? –