Переход фрагмента

Я создаю поток навигации в моем приложении, где у меня есть три фрагмента. Вот полный сценарий,

  • Фрагмент А (Получить ОТП)
  • Фрагмент B (Подтверждение OTP)
  • Фрагмент C (сменить пароль)

Навигация пользователя начнется с фрагмента А. Пользователь введет имя пользователя и запросит OTP. Мы добавили Фрагмент A в XML Layout.

Фрагмент B добавляется динамически, а также addToBackStack("фрагмент B"). Поэтому, когда мы нажимаем кнопку "Назад", popupbackstack работает нормально.

Подтверждение подтверждения приведет пользователя к экрану фрагмента C (изменить пароль), теперь, если пользователь щелкнет назад, он должен перевести пользователя на первый экран и пропустить фрагмент B. Для этого, если я заменю фрагмент C фрагментом B, на обратной стороне фрагмент останется и не всплывает обратно.

Вот код для добавления и замены фрагментов B и C соответственно.

public void addConfirmOtpView(){
    ConfirmOTPFragment confirmOtpFragment = new ConfirmOTPFragment();
    mFragmentTransaction = mFragmentManager.beginTransaction();
    mFragmentTransaction.add(R.id.containerLayout, confirmOtpFragment, confirmOtpFragment.getClass().getSimpleName());
    mFragmentTransaction.addToBackStack(confirmOtpFragment.getClass().getSimpleName());
    mFragmentTransaction.commit();
}

public void replaceResetPasswordFragment() {
    ResetPasswordFragment resetPassword = new ResetPasswordFragment();
    mFragmentTransaction = mFragmentManager.beginTransaction();
    mFragmentTransaction.replace(R.id.containerLayout, resetPassword);
    mFragmentTransaction.commit();
}

Редактировать:

@Override
public void onBackPressed() {
    if (mFragmentManager != null && mFragmentManager.getBackStackEntryCount() != 0){
        mFragmentManager.popBackStack();
    }else {
        super.onBackPressed();
    }
}

2 ответа

Сохраняя текущий код для транзакций фрагментов, измените только добавление фрагмента B следующим образом:

public void addConfirmOtpView(){
    ConfirmOTPFragment confirmOtpFragment = new ConfirmOTPFragment();
    mFragmentTransaction = mFragmentManager.beginTransaction();
    mFragmentTransaction.replace(R.id.containerLayout, confirmOtpFragment, confirmOtpFragment.getClass().getSimpleName());
    mFragmentTransaction.addToBackStack(confirmOtpFragment.getClass().getSimpleName());
    mFragmentTransaction.commit();
}

Это предполагает, что у вас есть общий контейнер для всех ваших фрагментов. Позвольте мне знать, что происходит.

Надеюсь это поможет!

Не добавлять Fragment A в Backstack или когда вы открываете Fragment Cочистите backstack, когда вы нажмете кнопку возврата, Fragment A будет открыт. Ответ выбран из /questions/47830727/popbackstack-no-ostavit-pervyij-fragment-v-android/47830793#47830793.

Надеюсь это поможет.

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