Android布局更改

Android布局更改,android,android-layout,Android,Android Layout,我想使用不同的布局的景观和肖像。我将xml文件分别放在layout和layout land中 对于我的家长活动,我设置了android:configChanges=“keyboardHidden | orientation | screenSize”,所以我想自己处理方向更改 我已尝试手动更改布局: @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationCh

我想使用不同的布局的景观和肖像。我将xml文件分别放在layout和layout land中

对于我的家长活动,我设置了android:configChanges=“keyboardHidden | orientation | screenSize”,所以我想自己处理方向更改

我已尝试手动更改布局:

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

    getFragmentManager().beginTransaction().replace(R.id.content_frame, new FoodDashboardFragment()).commit();
}
它是有效的。。。但当进入主屏幕时,应用程序崩溃。。。所以我猜我错过了什么。还有其他(简单的)方法吗

以下是日志:

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)

我建议不要使用配置更改的
onConfigurationChanged
,而是使用
onSaveInstanceState(Bundle)
onRestoreInstanceState(Bundle)
并将需要保留的任何数据保存到
Bundle

这样,当活动被销毁并重新创建时,您的土地布局将自动使用,并且您将保留只需要的数据


通常情况下,
onConfigurationChanged
用于特定/特殊情况,在大多数情况下,
onSaveInstanceState
onRestoreInstanceState
是合适的。

如果您有片段层次结构,请使用
getChildFragmentManager()
而不是
getFragmentManager()
。例如,如果父片段中有片段寻呼机。

发布crashThanks的日志以获取建议,但是,正如我所说,我需要保持父活动的完整性,因此我使用的是android:configChanges=“orientation”。