2013-07-23 2 views
0

Je souhaite utiliser une mise en page différente pour le paysage et le portrait. J'ai mis les fichiers xml dans la disposition et la mise en page-terre respectueuse.Modification de la disposition Android

Pour mon activité parent, j'ai configuré android: configChanges = "keyboardHidden | orientation | screenSize" donc je veux gérer les changements d'orientation moi-même.

J'ai essayé cette option pour modifier manuellement la mise en page:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    getFragmentManager().beginTransaction().replace(R.id.content_frame, new FoodDashboardFragment()).commit(); 
} 

Il fonctionne ... mais les application se bloque lors du passage à l'écran d'accueil ... donc .. Je devine que je suis absent quelque chose. Y a-t-il une autre façon (simple) de faire cela?

Voici le journal:

07-23 17:58:46.717: E/AndroidRuntime(862): FATAL EXCEPTION: main 
07-23 17:58:46.717: E/AndroidRuntime(862): java.lang.IllegalStateException: Fragment FoodDashboardFragment{41a06e30} is not currently in the FragmentManager 
07-23 17:58:46.717: E/AndroidRuntime(862): at android.support.v4.app.FragmentManagerImpl.putFragment(FragmentManager.java:546) 
07-23 17:58:46.717: E/AndroidRuntime(862): at com.android.restauranthanovra.MainActivity.onSaveInstanceState(MainActivity.java:167) 
07-23 17:58:46.717: E/AndroidRuntime(862): at android.app.Activity.performSaveInstanceState(Activity.java:1137) 
07-23 17:58:46.717: E/AndroidRuntime(862): at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1215) 
07-23 17:58:46.717: E/AndroidRuntime(862): at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:2951) 
07-23 17:58:46.717: E/AndroidRuntime(862): at android.app.ActivityThread.handleStopActivity(ActivityThread.java:3010) 
07-23 17:58:46.717: E/AndroidRuntime(862): at android.app.ActivityThread.access$900(ActivityThread.java:130) 
07-23 17:58:46.717: E/AndroidRuntime(862): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1222) 
07-23 17:58:46.717: E/AndroidRuntime(862): at android.os.Handler.dispatchMessage(Handler.java:99) 
07-23 17:58:46.717: E/AndroidRuntime(862): at android.os.Looper.loop(Looper.java:137) 
07-23 17:58:46.717: E/AndroidRuntime(862): at android.app.ActivityThread.main(ActivityThread.java:4745) 
07-23 17:58:46.717: E/AndroidRuntime(862): at java.lang.reflect.Method.invokeNative(Native Method) 
07-23 17:58:46.717: E/AndroidRuntime(862): at java.lang.reflect.Method.invoke(Method.java:511) 
07-23 17:58:46.717: E/AndroidRuntime(862): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
07-23 17:58:46.717: E/AndroidRuntime(862): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
07-23 17:58:46.717: E/AndroidRuntime(862): at dalvik.system.NativeStart.main(Native Method) 
+0

Afficher le logcat du plantage – codeMagic

+0

Qu'est-ce que l'erreur indique? – gwin003

Répondre

0

Je suggère, au lieu d'utiliser onConfigurationChanged, utiliser onSaveInstanceState(Bundle) et onRestoreInstanceState (Bundle) et enregistrer toutes les données qui doivent être conservés dans le Bundle. Ainsi, lorsque l'activité est détruite et recréée, votre mise en page terrestre sera automatiquement utilisée et vous conserverez les données dont vous avez seulement besoin.

L'utilisation de onConfigurationChanged est généralement pour des cas spécifiques/spéciaux et dans la plupart des cas, onSaveInstanceState et onRestoreInstanceState convient.

+0

Merci pour le conseil, mais, comme je l'ai dit, je dois garder mon activité parent intacte, donc j'utilise android: configChanges = "orientation". –

0

Utilisez getChildFragmentManager() au lieu de getFragmentManager() si vous avez des fragments de hiérarchie. par exemple. si vous avez des pagineurs de fragments dans votre fragment parent.

Questions connexes