Фрагмент удаляется при изменении ориентации
Я использую фрагмент в моем приложении. Когда я меняю ориентацию, фрагмент удаляется, и моя основная активность становится видимой, из которой я добавил этот фрагмент. ниже код -
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 ответа
Я не думаю, что принятый ответ является правильным, поэтому я пишу этот:
При замене фрагмента вы должны использовать метод 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();
}
У меня была точно такая же проблема, как упомянуто выше, и я исправил ее в AndroidManifest, добавив это:
<activity
...
android:configChanges="orientation|screenLayout|screenSize|layoutDirection">
Надеюсь это поможет!
Вероятно, следует сохранить позицию с помощью onSaveInstanceState() и проверить аргумент пакета в onCreate().