0

フラグメントを処理するアクティビティがあります。フラグメントを追加/置換し、それらをバックスタックに追加する (または追加しない) ために、次のメソッドを作成しました。

public void startFragment(CCFragment fragment, boolean addToBackStack) {
    final String fragmentTag = fragment.getClass().getSimpleName();
    final FragmentManager fragmentManager = getSupportFragmentManager();

            // If my fragment is already in the backstack, I don't want to add 
            // it again, but go back to it:
    boolean fragmentPopped=false;
    if(fragmentManager.findFragmentByTag(fragmentTag)!=null){
        fragmentPopped=true;
        fragmentManager.popBackStack(fragmentTag,0);
    }

            //If it is not, I want to add/replace it
    if (!fragmentPopped) {
        fragment.setFragmentDelegate(this);
        FragmentTransaction fragmentTransaction = fragmentManager
                .beginTransaction();
        fragmentTransaction.replace(CONTENT_VIEW_ID, fragment, fragmentTag);
        if (addToBackStack)
            fragmentTransaction.addToBackStack(null);
        fragmentTransaction.commit();
    }
}

次のシナリオが発生するまで、これは正常に機能します。

startFragment(F1, false); //バックスタックには何もありません

startFragment(F2, true); //バックスタックの F1

startFragment(F3, false); //バックスタックの F1

startFragment(F1, false); ->これを呼び出すと、「if」に入り、popBackStack が機能しないため、アプリは F1 に戻るのではなく、F3 にとどまります。戻るボタンを押すと、アプリは F1 に移動します...

それで、私はここで何が間違っていますか?名前が正しく保存されているかどうかはすでに確認しました。

4

1 に答える 1