0

3 つのフラグメントがあるアプリケーションでナビゲーション フローを作成しています。これが完全なシナリオです。

  • フラグメント A (OTP を取得)
  • フラグメント B (OTP を確認)
  • フラグメント C (パスワードの変更)

ユーザー ナビゲーションはフラグメント A から開始します。ユーザーはユーザー名と OTP を取得するための要件を入力します。XML レイアウトにフラグメント A を追加しました。

フラグメント B が動的に追加され、addToBackStack("fragmentB") も追加されました。そのため、戻るボタンをクリックすると popupbackstack が正常に動作します。

検証の確認により、ユーザーはフラグメント 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();
    }
}
4

2 に答える 2

0

バックスタックに追加しないでくださいFragment A。または、開いたときにFragment Cバックスタックをクリアし、戻るボタンを押すFragment Aと開きます。https://stackoverflow.com/a/28361585/3027124から選択された回答。

お役に立てれば。

于 2016-02-02T10:55:32.470 に答える