片段转换

时间:2016-02-02 09:52:42

标签: android android-fragments fragment fragmenttransaction fragment-transitions

我正在我的应用程序中创建一个导航流程,其中有三个片段。这是完整的方案,

  • 片段A(获取OTP)
  • 片段B(确认OTP)
  • 片段C(更改密码)

用户导航将从片段A开始。用户将输入用户名和req以获取OTP。我们在XML Layout中添加了Fragment A.

片段B动态添加,addToBackStack(" fragmentB")也是。所以当我们点击后退按钮时,popupbackstack工作正常。

验证确认将用户带到Fragment C(更改密码)屏幕,现在如果用户点击它,它应该将用户带到第一个屏幕并跳过片段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();
    }
}

2 个答案:

答案 0 :(得分:1)

在维护片段事务的当前代码时,只需更改片段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();
}

这假设您拥有所有片段的公共容器。让我知道会发生什么。

希望这有帮助!

答案 1 :(得分:0)

不要在Backstack中添加Fragment A或打开Fragment C时清除背斜,当您按下后退按钮时,Fragment A将会打开。答案摘自https://stackoverflow.com/a/28361585/3027124

希望这有帮助。