Creé una prueba project que tiene dos fragmentos diferentes para mostrar en la misma actividad. Un fragmento es para el paisaje y el otro para el retrato.No se cargó un fragmento diferente al cambiar la orientación (android)
# My unique activity
public class MainActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
# First Fragment
public class LandscapeFragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
TextView v = (TextView) inflater.inflate(R.layout.fragment, container, false);
v.setText("LANDSCAPE");
return v;
}
}
# Other Fragment
public class PortraitFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
TextView v = (TextView) inflater.inflate(R.layout.fragment, container, false);
v.setText("PORTRAIT");
return v;
}
}
Y tengo dos main.xml, uno en layout/y otro en layout-land /. Cada main.xml apunta al Fragmento correcto que se utilizará.
<!-- layout-land/main.xml -->
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment"
android:name="br.luckcheese.test.LandscapeFragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp" />
<!-- layout/main.xml -->
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment"
android:name="br.luckcheese.test.PortraitFragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp" />
<!-- layout/fragment.xml -->
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="30sp" />
Al abrir la aplicación en el paisaje se muestra la LandscapeFragment, y cuando abro en el retrato se muestra la PortraitFragment. Hasta aquí todo bien.
Pero si abro en horizontal y giro el dispositivo a vertical, entonces LandscapeFragment se vuelve a cargar y se muestra. Cuál no es el comportamiento predicho. PortraitFragment debería haberse cargado.
Y lo mismo ocurre al revés, si el dispositivo comienza en la orientación vertical y luego lo giro a horizontal: el VerticalFragmento simplemente se vuelve a cargar, en lugar de cargar LandscapeFragment.
¿Qué estoy haciendo mal?
No, la línea única añadí al manifiesto por defecto es 'android: screenOrientation = "sensor"' para la actividad – Luckcheese
¿Intenta hacer un punto de interrupción en onCreate() de su actividad para ver si se llama este método cuando gira el dispositivo? –
Sí. Se llama. Agregué mensajes de registro en onCreate para mi actividad y para cada fragmento. Y cuando giro el dispositivo, se llama a onCreate del fragmento incorrecto después de la actividad enCreate. – Luckcheese