【问题标题】:Fragment Transition片段过渡
【发布时间】:2016-02-02 09:52:41
【问题描述】:

我正在我的应用程序中创建一个导航流,其中包含三个片段。这是完整的场景,

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

用户导航将从 Fragment A 开始。用户将输入用户名和请求以获取 OTP。我们在 XML Layout 中添加了 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();
    }
}

【问题讨论】:

  • 和你的弹回代码?

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


【解决方案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();
}

这是假设您有一个用于所有片段的通用容器。让我知道会发生什么。

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    不要在Backstack中添加Fragment A或者当你打开Fragment C时,清除backstack,当你按下返回按钮时,Fragment A将被打开。答案来自https://stackoverflow.com/a/28361585/3027124

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2014-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多