3

フラグメントを追加し、後でreplace()フラグメントを追加するフローを持つ。すべてのフラグメントが動的に追加されますが、すべてが call ではありませんaddToBackStack()

getSupportFragmentManager().beginTransaction()
    .add(R.id.frgment_holder, frgmtA, frgmtA.NAME)
    .commit();

そして、どこかに次のように別のものを追加できます:

getSupportFragmentManager().beginTransaction()
    .replace(R.id.frgment_holder, frgmtB)
    .addToBackStack(frgmtB.NAME)
    .commit();

frgmtB を使用するreplace()と、コンテナ R.id.frgment_holder から frgmtA が削除されます。この状態で戻るボタンを押すと、frgmtB がポップされます。しかし、いつ追加したときに呼び出さなくても、frgmtA を再作成しaddToBackStack()ますか?

フラグメントを同じコンテナに追加するフローで、シリアルが add() と replace() の呼び出しが混在していて、誰かが呼び出しaddToBackStack()ているが誰かが呼び出していない場合、戻るボタンはどのように動作しますか?

編集:後

getSupportFragmentManager().beginTransaction()
        .replace(R.id.frgment_holder, frgmtB)
        .addToBackStack(frgmtB.NAME)
        .commit();

getSupportFragmentManager().findFragmentByTag(frgmtA.NAME);

まだfrgmtAを見つけていますか?addToBackStack() とも呼ばれる frgmtA を追加するとどうなりますか。

ドキュメントには、「これは、現在マネージャーのアクティビティに追加されているフラグメントを最初に検索します。そのようなフラグメントが見つからない場合は、現在バックスタックにあるすべてのフラグメントが検索されます。」

ケースは

  1. frgmtA を追加します。スタックへの追加を呼び出さないでください。UI の状態がここで変更されました。

(frgmtA が add() によって動的に追加されず、class="frgmtA" でレイアウト ファイルに指定されている場合はどうなるでしょうか?)。

  1. () を frgmtB に置き換えます。addToStack();

  2. () を frgmtC に置き換えます。addToStack();

次に、stackTop が frgmtC の場合、戻るボタンを押して最初の frgmtA を最後の UI 状態に戻します。

4

3 に答える 3

0

onBackPressed()またはaddOnBackStackChangedListener( )を使用して [戻る] ボタンのロジックに干渉しない限り、物事は簡単です

  • でフラグメントを追加するaddToBackStack()と、Back をタップすると削除されます
  • バックスタックに他のフラグメントが残っていない場合、アプリは閉じられます
于 2015-11-03T21:14:11.513 に答える