В моем приложении у меня есть несколько пунктов меню в окне навигации. Когда пользователь касается одного из этих элементов и переходит к соответствующему фрагменту, я хочу, чтобы обратный стек фрагмента был очищен, КРОМЕ этого фрагмента, к которому он только что перемещался. Позвольте мне проиллюстрировать:
В моем навигационном ящике у пользователя есть возможность открывать фрагменты F1, F2, F3, F4, F5, F6. Когда приложение впервые открывается, пользователь запускает на F1. Допустим, из F1 пользователь открывает фрагменты F7 -> F8 -> F9 -> F10, используя кнопки внутри самих фрагментов. На этом этапе backstack выглядит следующим образом:
F1 -> F7 -> F8 -> F9 -> F10
Предположим, что здесь пользователь открывает навигационную панель и выбирает F2. Я хочу, чтобы вышеприведенный backstack был очищен и заполнен ТОЛЬКО F2, поэтому пользователь не может go вернуться к F10 из F2. Другими словами, backstack должен стать:
Не это: F1 -> F7 -> F8 -> F9 -> F10 -> F2
Но это: F2
Как мне это сделать? sh это?
РЕДАКТИРОВАТЬ 1: Одним из моих попыток было добавить OnNavigationItemSelectedListener
в навигацию ViewView при загрузке действия, которое очистило бы backstack при нажатии одного из элементов. Мое решение сработало, но в процессе я переопределил код по умолчанию, который фактически изменился на новый фрагмент. Я пролистал Android API и нашел это:
navigationView.setNavigationItemSelectedListener(
new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
boolean handled = onNavDestinationSelected(item, navController);
if (handled) {
ViewParent parent = navigationView.getParent();
if (parent instanceof DrawerLayout) {
((DrawerLayout) parent).closeDrawer(navigationView);
} else {
BottomSheetBehavior bottomSheetBehavior =
findBottomSheetBehavior(navigationView);
if (bottomSheetBehavior != null) {
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
}
}
}
return handled;
}
});
Это НЕ мой код. Это собственный код, который обрабатывает выбор пунктов меню в блоке навигации (находится в классе NavigationUI
). Если я хочу добавить свой собственный OnNavigationItemSelectedListener
, мне придется воссоздать функциональность, показанную выше, что я не могу сделать, так как некоторые из методов там защищены. Вот почему я не верю, что это решение будет работать.