Как предотвратить вызов onStart/OnResume первого фрагмента, когда я очищаю backstack и добавляю новый фрагмент?

У меня должен быть "корневой" фрагмент и добавить все фрагменты выше. Поэтому кнопки навигации должны иметь возможность очищать весь задний стек (кроме первого фрагмента) и добавлять новые.

Как это работает:

При запуске приложение открывает корневой фрагмент, пользователь может открыть любой другой фрагмент и добавить его в стек. Когда пользователь нажимает кнопку "Домой", все фрагменты удаляются и корневой фрагмент добавляется снова. После этого пользователь может снова открыть любой другой фрагмент. В этом случае проблем нет, потому что onStart/OnResume вызывается должным образом.

Но пользователь также может напрямую открывать некоторые определенные фрагменты (например, новости) из нижнего меню (из любого места в приложении), и в этом случае все фрагменты также удаляются (кроме корневого), и новый фрагмент немедленно добавляется в стек, но в этом случае В этом случае onStart/OnResume также вызывается для корневого фрагмента. Этого я бы хотел избежать.

Код для очистки заднего стека:

if (fragmentManager.getBackStackEntryCount() > 1) {
    for (int i = 1; i < fragmentManager.getBackStackEntryCount(); ++i) {
             fragmentManager.popBackStack();
        }
}

Код для добавления фрагмента в задний стек:

FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(viewId, fragment, fragment.getClass().getName());
transaction.addToBackStack(null);
transaction.commit();

0 ответов

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