我在我的应用程序中使用片段。当我更改方向时,片段会移除,我的主要活动变得可见,我已添加此片段。下面是代码 -
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应用程序中一样。 即使我改变了设备的方向,我该怎么办?我的片段仍然存在?
先谢谢
答案 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()。