4

I am using this to launch a new fragment depending on the screen size of the device.

FragmentManager fragMgr = getSupportFragmentManager();
        releaseInfoFragment release = (releaseInfoFragment)fragMgr.findFragmentById(R.id.release);

            release = releaseInfoFragment.newInstance(url);
            FragmentTransaction xaction = fragMgr.beginTransaction();
            xaction.replace(R.id.release, release)
            .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
            .addToBackStack(null)
            .commit();
    }

The problem is when the user presses the back press button, the it goes back to each fragment that was opened during the activities life cycle. How can i make it where it doesnt do this? I just want it to remove the fragment once its pressed the first time, and then go back to the following activity on the second click.

How do i go about doing this?

4

3 に答える 3

8

すべての Fragment に戻りたくない場合はaddToBackStack(null)、トランザクションから削除してください。関数呼び出しaddToBackStack(null)は、Fragment をバックスタックに追加する命令です。

編集

バックスタックからすべてのフラグメントを削除する簡単な方法がわかりません。頭のてっぺんから、私はこれを提案します:

  1. addToBackStack(null)すべての Fragment がバック スタックに追加されるように、呼び出しを in のままにします。
  2. アクティビティのonBackPressed()メソッドをオーバーライドし、popBackStack()すべてのフラグメントをポップするために使用します

のAndroid ドキュメントを見ると、popBackStack()役立つ便利な機能がいくつかあるようです。

POP_BACK_STACK_INCLUSIVE: popBackStack(String, int) および popBackStack(int, int) のフラグ: 設定されていて、バック スタック エントリの名前または ID が指定されている場合、一致しないエントリが返されるまで、すべての一致するエントリが消費されます。見つかったか、スタックの一番下に到達しました。

popBackStack(int id, int flags) 指定された識別子を持つものまでのすべてのバックスタック状態をポップします。

于 2011-08-21T15:44:53.130 に答える
0

2 番目の詳細フラグメントを追加するには addToBackStack(null) が必要ですが、1 番目のリスト フラグメントを追加するには addToBackStack(null) が必要ないようです。最初の FragmentTransaction に addToBackStack(null) がありますか?

于 2012-01-18T01:38:40.387 に答える