Je développe une activité Android qui comporte deux fragments. L'activité a deux présentations possibles L'un d'entre eux est en Portait, l'autre en Paysage.
J'ai créé les fragments qui fonctionnent bien, mais j'ai des problèmes lorsque je change l'orientation du téléphone/de la tablette.
L'un de ces fragments est un Liste des fragments avec une AsyncTask pour charger les données de la liste depuis le web. Je n'ai pas de problème avec ce fragment, car je peux le recréer. (Bien que le chargement prenne un certain temps).
L'autre Fragment contient un fragment de Google Map V2 :
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<fragment
android:id="@+id/mapInicio"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.SupportMapFragment" />
</LinearLayout>
Je crée les fragments à partir des onCreate
de la méthode FragmentActivity
:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_inicio);
Fragment listFragment = new ListaEstaciones();
FragmentTransaction transList = getSupportFragmentManager()
.beginTransaction();
transList.add(R.id.listaestaciones_f_container, listFragment);
transList.commit();
Fragment mapFragment = new MapaGoogleV2();
FragmentTransaction transMap = getSupportFragmentManager()
.beginTransaction();
transMap.add(R.id.mapa_f_container, mapFragment);
transMap.commit();
}
Dans le cadre de la onConfigurationChanged
j'ai ce code. Comme dans onCreate
Je crée les fragments et je change la vue, car nous sommes maintenant en mode Paysage/Portrait :
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setContentView(R.layout.activity_inicio);
Fragment listFragment = new ListaEstaciones();
FragmentTransaction transaction = getSupportFragmentManager()
.beginTransaction();
transaction.add(R.id.listaestaciones_f_container, listFragment);
transaction.commit();
Fragment mapFragment = new MapaGoogleV2();
FragmentTransaction transMap = getSupportFragmentManager()
.beginTransaction();
transMap.add(R.id.mapa_f_container, mapFragment);
transMap.commit();
}
Lorsque je crée avec cette méthode, le ListFragment fonctionne parfaitement, mais il ne fonctionne pas avec le MapFragment. L'application chrash dans le onCreateView
de la méthode Fragment avec carte . Je pense que je ne peux pas gonfler à nouveau ce fragment :
04-16 18:20:32.795 : E/AndroidRuntime(15543) : Android.view.InflateException : Fichier XML binaire ligne #6 : Erreur de gonflage du fragment de classe
Mes questions :
Existe-t-il un moyen d'éviter la recréation des fragments lors de la modification de la mise en page ?
Comment faire ?
Gracias.