Переход фрагмента
Я создаю поток навигации в моем приложении, где у меня есть три фрагмента. Вот полный сценарий,
- Фрагмент А (Получить ОТП)
- Фрагмент 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.
Надеюсь это поможет.