0

コンテナー内の 4 つのフラグメント [メイン、A、B、C] を切り替える次のコードがあります。

ユーザーがどのようにフラグメントをナビゲートしたかに関係なく、 [メイン]に戻るには戻るボタンが必要です。たとえば、[Main] >> [A] >> [C]に移動すると、 [Main]に戻る必要があります。

しかし、私は望ましい結果を得ていません。断片間のコパリソンがうまくいっていないと思います。

Launcher MainFragment = new Launcher();

public void switchFragment(Fragment pFragment) {
    FragmentManager fm = getSupportFragmentManager();
    Fragment currentFragment = fm.findFragmentById(R.id.fragment_container);

    if (pFragment == MainFragment){
        getSupportFragmentManager().beginTransaction()
        .add(R.id.fragment_container, pFragment).commit();
    }
    else if (currentFragment == MainFragment && pFragment != MainFragment){
        //Fragment fr = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.replace(R.id.fragment_container, pFragment).addToBackStack(null).commit();
    }
    else {
        //Fragment fr = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.replace(R.id.fragment_container, pFragment).commit();
    }
    currentFragment = pFragment;
}

アップデート -

この方法がうまく機能しているのを見てきましたが、それでも問題が発生します。メイン フラグメントに戻らずにいくつかのフラグメントをナビゲートすると、[戻る] を押しても元に戻りません。popbackstack() に問題があったようなものです。

public void switchFragment(Fragment pFragment) {
    FragmentManager fm = getSupportFragmentManager();
    Fragment currentFragment = fm.findFragmentById(R.id.fragment_container);

    if (pFragment.equals(MainFragment)){
        getSupportFragmentManager().beginTransaction()
        .add(R.id.fragment_container, pFragment).commit();
    }
    else if (currentFragment.equals(MainFragment) && !pFragment.equals(MainFragment)){
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.replace(R.id.fragment_container, pFragment).addToBackStack(null).commit();
    }
    else {
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.replace(R.id.fragment_container, pFragment).commit();
    }
}
4

2 に答える 2