我正在我的应用程序中创建一个导航流,其中我有三个片段。这是一个完整的场景
用户导航将从片段A开始。用户将输入用户名和req以获取OTP。我们在XML布局中添加了片段A。
B片段动态添加,addToBackStack("fragmentB")也加入。因此,当我们单击“后退”按钮时,弹出回堆栈可以正常工作。
验证确认将使用户转到片段C(更改密码)屏幕,现在如果用户单击back,它应该带用户到第一个屏幕并跳过片段B。为此,如果我用片段B替换片段C,则背压片段保留在那里,不会弹回。
下面是分别添加和替换片段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();
}
}发布于 2016-02-02 11:14:20
在维护碎片事务的当前代码的同时,仅按以下方式更改片段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();
}--这是假设您有一个用于所有片段的公共容器()。告诉我发生了什么。
希望这能有所帮助!
发布于 2016-02-02 10:55:32
不要在后台添加Fragment A,或者当您打开Fragment C时,清除back,当您按后退按钮时,Fragment A将被打开。答案选自https://stackoverflow.com/a/28361585/3027124。
希望这能有所帮助。
https://stackoverflow.com/questions/35150027
复制相似问题