2013-07-23 59 views
0

我想为横向和纵向使用不同的布局。我已经把xml文件放在layout和land-land中。Android布局更改

对于我的父母活动,我设置了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) 
+0

发布崩溃logcat – codeMagic

+0

错误说什么? – gwin003

回答

0

我会建议,而不是使用onConfigurationChanged,利用onSaveInstanceState(Bundle)onRestoreInstanceState (Bundle)并保存需要保留到Bundle任何数据。

通过这种方式,当活动被破坏并重新创建时,将自动使用您的地形布局,并保留您只需要的数据。

使用onConfigurationChanged通常用于特定/特殊情况,并且在大多数情况下,onSaveInstanceStateonRestoreInstanceState是合适的。

+0

感谢您的建议,但正如我所说,我需要保持我的父母活动完好无损,所以我使用android:configChanges =“orientation”。 –

0

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