当Orientation更改时,片段将被删除

时间:2014-06-24 06:53:56

标签: android android-layout android-fragments android-fragmentactivity

我在我的应用程序中使用片段。当我更改方向时,片段会移除,我的主要活动变得可见,我已添加此片段。下面是代码 -

Fragment fragment = null;
    switch (position) {
    case 0:
        fragment = new ManageDataFragment();
        break;
    case 1:
        fragment = new DownloadFragment();
        break;
    case 2:
        fragment = new UserInfoFragment();
        break;
    case 3:
        fragment = new AboutAppFragment();
        break;
    case 4:
        fragment = new ShareAppFragment();
        break;
    case 5:
        fragment = new SettingsFragment();
        break;
    default:
        break;
    }

    if (fragment != null) {
        FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.frame_container, fragment).commit();
        // update selected item and title, then close the drawer
        setTitle(menutitles[position]);
        mDrawerLayout.closeDrawer(mDrawerList);
    } else {
        // error in creating fragment
        Log.e("MainActivity", "Error in creating fragment");
    }

我在navigationDrawer中使用此片段,就像在Gmail应用程序中一样。 即使我改变了设备的方向,我该怎么办?我的片段仍然存在?

先谢谢

3 个答案:

答案 0 :(得分:1)

我遇到了与上面提到的完全相同的问题,我通过添加以下内容将其修复在AndroidManifest中:

 <activity
        ...
        android:configChanges="orientation|screenLayout|screenSize|layoutDirection">

希望这有帮助!

答案 1 :(得分:1)

我不认为接受的答案是正确的,所以我正在写这个:

更换片段时,您应该使用方法replace和三个参数,以便稍后找到您的片段:

fragmentManager.beginTransaction()
                .replace(R.id.frame_container, fragment, TAG_FRAGMENT).commit();

TAG_FRAGMENT是一些字符串标记。

然后在onCreate中,如果活动重新启动,您可以找到您的片段并将其添加到容器中:

if(savedInstanceState != null) {
    fragment = getFragmentManager().findFragmentByTag(TAG_FRAGMENT);
    fragmentManager.beginTransaction()
                    .replace(R.id.frame_container, fragment, TAG_FRAGMENT).commit();
}

答案 2 :(得分:0)

可能应该使用onSaveInstanceState()保存位置并测试bundle参数为onCreate()。