переход к первому фрагменту из любого места при нажатии кнопки «назад» с использованием backstack - PullRequest
0 голосов
/ 24 октября 2019

У меня есть HomeFragment1, ClassFragment2, QuestionFragment3, LastFragment4. Пользователь будет перемещаться в указанном порядке. Я хочу вернуться к HomeFragment1 из любого места, где пользователь нажимает кнопку «Назад».

Я пытался удалить addToBackStack во всех фрагментах, кроме HomeFragment1, но при нажатии кнопки «Назад» фрагменты перекрываются.

Я написал в onBackPressed () MainActivity, как показано ниже:

if(getFragmentManager().getBackStackEntryCount() > 0 ) {
    fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
} else {
    super.onBackPressed();
}

Но оно возвращается от 4 до 3 к 2 к 1 в этом порядке для каждого обратного нажатия. Я хотел бы перейти непосредственно к 1 из любого фрагмента.

1 Ответ

0 голосов
/ 29 октября 2019

Что сработало для меня:

1) Необходимо добавить все фрагменты в backstack, используя addToBackStack("text"). Поскольку отсутствие добавления фрагмента в backstack приведет к его перекрытию с предыдущим фрагментом при обратном нажатии .

2) Затем нам нужно очистить backstack, используя следующие строки кода, которые должны быть добавлены в onBackPressed() переопределенный метод.

if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
                getSupportFragmentManager().popBackStack(getSupportFragmentManager()
    .getBackStackEntryAt(0).getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
} else {
    super.onBackPressed();
}

или просто

getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

На этот вопрос найдено много ответов, как упомянуто ниже, но один работал для меня выше.

Является ли это правильным способом очистки заднего стека фрагмента при выходе из глубоко вложенного стека?

Очистка стека назад с использованием фрагментов

PopBackStack, но сохранить первый фрагмент в Android

Как очистить фрагмент Backstack в Android

Спасибо @Ankit Aman за ссылку.

...