Фрагмент удаляется при изменении ориентации

Я использую фрагмент в моем приложении. Когда я меняю ориентацию, фрагмент удаляется, и моя основная активность становится видимой, из которой я добавил этот фрагмент. ниже код -

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().

Другие вопросы по тегам