11

問題があり、どこにも解決策が見つかりません。

戻るボタンを押しても、アプリは前のフラグメントに戻らず、代わりにアクティビティを閉じます。

[1]、[2]、[3]、[4] の 4 つのフラグメントを表示するアクティビティがあります。最初の 3 つのフラグメントはアクション バーで切り替えることができますが、それらをバック スタックに追加したくありません。

フラグメント [4] は、フラグメント [3] で選択された項目の詳細ビューです。[4] を押すと、アプリを閉じずにフラグメント [3] に戻りたい。

トランジションは、フラグメントが配置されているアクティビティによって次のように行われます。

private void replaceFragment(Fragment fragment, boolean toBackStack){

    if(fragment != null){

        FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.container, fragment);

        if(toBackStack)
            fragmentTransaction.addToBackStack(null);

        fragmentTransaction.commit();
    }
}

[3] から [4] への遷移の場合を除き、toBackStack は常に false です。

すべてのトランジションで toBackStack true を渡すと、とにかくアクティビティが閉じます。

4

1 に答える 1

17

私も同じ問題を抱えていました。具体的には、PreferenceFragment を実装しており、戻るボタンで以前に読み込まれたフラグメントに戻るようにしたいと考えています。

「バック スタック」は、システムの[戻る] ボタンで自動的にトリガーされるものではないようです。私の解決策は、 onBackPressedオーバーライドから手動でバック スタックをポップすることでした。

@Override
public void onBackPressed()
{
    if (inSettings)
    {
        backFromSettingsFragment();
        return;
    }
    super.onBackPressed();
}

設定フラグメントに移動するたびに、アクティビティでinSettingsブール値を true に設定して、その状態を維持します。backFromSettingsFragmentメソッドは次のようになります

private void backFromSettingsFragment()
{
    inSettings = false;
    getFragmentManager().popBackStack();
}

したがって、Fragment [4] にいるときの状態を追跡し、戻るボタンをインターセプトできる場合は、手動で呼び出すことができるはずです

getFragmentManager().popBackStack();

Fragment [3] に戻ります。

注: Fragment[4] ではなく、Fragment [3] をバック スタックに追加する必要があることに注意してください。([4] が [5] に進み、[4] にも戻る必要がある場合を除きます。)

于 2013-09-06T19:35:41.523 に答える