Фрагмент не переключится после того, как ОС убьет мое приложение - PullRequest
0 голосов
/ 29 июня 2019

У меня есть действие с BottomNavigationView , которое переключается между 3 фрагментами.Мои три фрагмента автоматически восстанавливаются при воссоздании активности.Поэтому я защищаю создание своих фрагментов в OnCreate действия с проверкой savedInstanceState == null, чтобы не добавлять дополнительные фрагменты поверх уже созданных / восстановленных.

if (savedInstanceState == null) {
    // Fragments are automatically restored when activity is recreated
    fragmentManager.beginTransaction().add(R.id.content_main, mTrendingFragment, "3").hide(mTrendingFragment).commit();
    fragmentManager.beginTransaction().add(R.id.content_main, mFavoriteFragment, "2").hide(mFavoriteFragment).commit();
    fragmentManager.beginTransaction().add(R.id.content_main, mUpcomingViewPagerFragment, "1").commit();
}

Сейчаспроблема в том, что когда через некоторое время я возвращаюсь к своей деятельности из фона и пытаюсь переключиться на другой фрагмент, это не работает.Домашний фрагмент всегда тот, который отображается, даже когда я щелкаю по элементу меню фрагмента другого в BottomNavigationView ;это не переключает фрагмент.Почему это происходит и как я могу исправить это поведение?

1 Ответ

1 голос
/ 29 июня 2019

Вы по-прежнему безоговорочно создаете новые экземпляры в onCreate (), когда делаете:

// Default fragment
mUpcomingViewPagerFragment = new UpcomingViewPagerFragment();
mFavoriteFragment = new FavoriteFragment();
mTrendingFragment = new TrendingFragment();

Когда вы восстанавливаете свой экземпляр (и savedInstanceState равно , а не равноnull), вы никогда не добавляете эти совершенно новые фрагменты в FragmentManager, поэтому вызов hide(), show() и т. Д. С этими фрагментами ничего не делает.

Вместо этого вам нужно извлечь эти фрагменты из FragmentManagerтак что ваши переменные экземпляра соответствуют фрагментам, о которых знает FragmentManager:

if (savedInstanceState == null) {
    // Create brand new Fragments
    mUpcomingViewPagerFragment = new UpcomingViewPagerFragment();
    mFavoriteFragment = new FavoriteFragment();
    mTrendingFragment = new TrendingFragment();

    // Add the brand new Fragments to the FragmentManager
    fragmentManager.beginTransaction().add(R.id.content_main, mTrendingFragment, "3").hide(mTrendingFragment).commit();
    fragmentManager.beginTransaction().add(R.id.content_main, mFavoriteFragment, "2").hide(mFavoriteFragment).commit();
    fragmentManager.beginTransaction().add(R.id.content_main, mUpcomingViewPagerFragment, "1").commit();
} else {
    // Retrieve the already existing Fragments from the FragmentManager
    mUpcomingViewPagerFragment = (UpcomingViewPagerFragment) fragmentManager.findFragmentByTag("1");
    mFavoriteFragment = (FavoriteFragment) fragmentManager.findFragmentByTag("2");
    mTrendingFragment = (TrendingFragment) fragmentManager.findFragmentByTag("3");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...