我正在我的应用程序中创建一个导航流,其中有三个片段。这是完整的场景,
- 片段 A(获取 OTP)
- 片段 B(确认 OTP)
- 片段 C(更改密码)
用户导航将从片段 A 开始。用户将输入用户名和请求以获取 OTP。我们在 XML 布局中添加了 Fragment A。
Fragment B 动态添加并且 addToBackStack("fragmentB") 也。因此,当我们单击返回按钮时,popupbackstack 工作正常。
验证确认会将用户带到 Fragment C(更改密码)屏幕,现在如果用户单击返回,它应该将用户带到第一个屏幕并跳过 Fragment B。为此,如果我用 Fragment B 替换 Fragment C,则在后按 Fragment 保留在那里并且不会弹回来。
这是分别添加和替换片段 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();
}
}