2016-03-31 10 views
4

簡単な質問ですが答えることができないようです... フラグメントをポップすることなくfragmentManagerのバックスタックをクリアするには?フラグメントをポップすることなく、fragmentManagerのバックスタックをクリアするには?

私はこのようにそれを理解する:

戻るスタックエントリ= addToBackStackコマンドでpreviosly保存されたトランザクションのリスト。 たとえば、「フラグメント1をフラグメント2と置き換えます。

popBackStack =最後に保存されたtransatcion reverseを行います。 例:「フラグメント2をフラグメント1と置き換えます。

私は最初のトランザクションをしたとしましょう:F1-> F2そしてこのトランザクションをバックスタックに追加しました。戻るボタンを押すと、F2-> F1が表示されます。

OK ...しかし...

私は私の心を変更しましたし、私は戻ってスタックをクリアしたいです。 私はF2フラグメントで作業したいと思っていますが、バックボタンを押すと、バックスタックが空になるようにアクティビティを閉じる必要があります。

私のようなものが必要です。私は複雑な状況に簡単な質問をしようとしたと私はシンプルな答えを得る

for(int i=0;i<getFragmentManager().getBackStackEntryCount();i++){ 
    getFragmentManager().getBackStackEntryAt(i).remove(); 
} 

EDITED を、 アビシェーク・パテルの答えは非常に良いですが、それは何ではありません)私は探していた。それでも良い答えです。

だけ明確にする:

  • トランザクション1
  • トランザクション2
  • トランザクション3
  • トランザクション4
:アンドロイドで
戻るスタックは次のように完全に編集可能なリストではありません

行うために "トランザクション3を削除しない"ことができます。

  • トランザクション1
  • トランザクション2
  • トランザクション4

我々は明確にすることができませんすべてbackstackと最後に目に見える断片を生かしておく。

我々はのような特定の位置にbackstacksレコードを削除することができ: 取得するには、 "トランザクション2にすべてを削除":

  • トランザクション1
  • トランザクション2

オン画面にトランザクション2の効果が表示されます。

なぜ私はこれが必要でしたか?

私は、「メインフラグメント」になるフラグメントを作ることができると考えました。このメインフラグメントは、このボスフラグメントが現在表示されていること、もう重要です。

(F) - 断片、(A) - 活性

(F) - ヘイ男。私は上司です。私は目に見えて、あなたに付き添っています。あなたのバックスタックをクリアしてくださいが、ここに私をもたらした取引を続けてください。

(A) - 申し訳ありませんが、あなたのトランザクションの前にあなたのバックスタックをクリアするために私に言わなければなりませんでしたので、新しいバックスタックの上にトランザクションを追加することができます。

+0

http://stackoverflow.com/questions/6186433/clear-back-stack-using-fragments – 1911192110920

答えて

7

私は前にそれを見つけたが、それは正確ではなかった、それは

public void clearBackstack() { 

    BackStackEntry entry = getSupportFragmentManager().getBackStackEntryAt(
      0); 
    getSupportFragmentManager().popBackStack(entry.getId(), 
      FragmentManager.POP_BACK_STACK_INCLUSIVE); 
    getSupportFragmentManager().executePendingTransactions(); 

} 
+0

を助けることもできる。このお試しください私が探していたもの私はバックスタックがリストのようなものだと思っていて、私が望む行を削除することができます... –

関連する問題