Фрагменты исчезают после запуска других тяжелых приложений - PullRequest
0 голосов
/ 14 мая 2019

У меня есть Активность с пятью фрагментами, которые переключаются нажатием кнопки в BottomNavigationView:

bottomNavigationView.setOnNavigationItemSelectedListener(item -> {
        switch (item.getItemId()) {
            case R.id.first:
                replaceFragment(FIRST_TAG);
                return true;
            case R.id.other:
           // last four fragments
            default:
                return false;
        }
    });

в replaceFragment:

private void replaceFragment(@NonNull String tag) {
    if (!checkFragment(tag)) {
          addFragment(getFragmentByTag(tag), tag);
    }
    showFragment(tag);
}

сheckFragment:

private boolean checkFragment(String tag) {
    return fm.findFragmentByTag(tag) != null;
}

addFragment:

private void addFragment(Fragment fragment, String tag) {
    if (!checkFragment(tag)) {
        fm.beginTransaction().add(R.id.frame, fragment, tag).hide(fragment).commit();
    }
}

showFragment:

private void showFragment(String tag) {
    // currentFragmentTag defines as FIRST_TAG in fields block
    currentFragment = fm.findFragmentByTag(currentFragmentTag);
    FragmentTransaction transaction = fm.beginTransaction();
    if (currentFragment != null) {
        transaction.hide(currentFragment);
    }
    transaction
            .attach(getFragmentByTag(tag))
            .show(getFragmentByTag(tag))
            .commit();
    currentFragmentTag = tag;
}

Это было сделано, чтобы избежать загрузки данных во фрагменты каждый раз, когда фрагмент отображается! Все фрагменты добавляются в FragmentManager только один раз, а позже появляются только вызовы hide (previousFragment) и show (nextFragment) .

Это хорошо работает! Прежде чем приложение перейдет в фоновый режим и будет запущено новое тяжелое приложение. В фоновом режиме активность моего приложения уничтожается, и когда я возвращаюсь в приложение, отображается только BottomNavigationView и пустой дисплей. Я проверил в отладке. И FragmentManaget.getActiveFragments() возвращает список из пяти фрагментов. Итак, активность восстановлена, FragmentManager восстановлена, FragmentManager содержит фрагмент. Почему фрагменты не отображаются на дисплее?

1 Ответ

0 голосов
/ 14 мая 2019

После просмотра вашего кода я могу задать один из пяти фрагментов в качестве фрагмента по умолчанию, который будет отображаться при запуске приложения.Попробуйте что-то вроде:

bottomNavigationView.getMenu().findItem(R.id.first).setChecked(true);

Сделайте это внутри onCreate() или onResume();Удачи!

...