Как предотвратить вызов 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();