5

クリアBackStackEntriesする方法はFragmentManager?これは、フラグメントオブジェクトを変更するために使用するコードです。

FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
Fragment homeFragment = new Home();
fragmentTransaction.replace(R.id.mainFragement, homeFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();

特定の状況では、完全なバックスタックエントリを削除する必要があります。フラグメントマネージャーでは、そのための特定の方法は見つかりませんでした。あなたはなにか考えはありますか?

4

5 に答える 5

6

私はあなたが求めていることを実行すると思うメソッドに取り組んできましたが、ドキュメントから理解できたのは、このメソッドがBackStackを空にするだけかどうか、またはコンテナを表示します。基本的に、スタックの一番上にあるエントリを見つけて、そのエントリを含むすべてを削除します。他の誰かが否定的な影響があると思うなら、私は非常に興味があるので私に知らせてください:

public static void clearBackStack(FragmentManager manager){
    int rootFragment = manager.getBackStackEntryAt(0).getId();
    manager.popBackStack(rootFragment, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
于 2011-08-10T03:04:23.093 に答える
2

これは私にとってはうまくいきます:

clearFragments(FragmentManager fm) {
    while (fm.popBackStackImmediate());
}
于 2012-01-26T08:23:07.880 に答える
1

すべてのバックスタックをクリアしたい場合は、おそらく前のコンテキストとは関係のないことを実行しようとしているためです。その場合、新しいアクティビティを起動する必要があります。

私が理解し始めているように、フラグメントを使用すると、アクティビティはフラグメントのコンテナとして機能します。フラグメント間の独立性を維持しながら、コンテキストに基づいてアクティビティでフラグメントを編成する必要があります。

あなたの場合、特定の状況が発生したときに、新しいアクティビティを起動して、古いアクティビティに配置する代わりに、この新しいアクティビティに目的のフラグメントを配置できます。この新しいアクティビティは、フラグメントの新しいスタックを処理します。そうすれば、コードももう少しカプセル化されますね。

この説明的な返信を見てください:CommonsWareの返信

それが役に立てば幸い!

于 2011-05-17T16:47:30.577 に答える
1

ドキュメントを読む限り、スタックをクリアする方法はありません。

これは大きな問題です。この問題を Android の問題トラッカーにアップロードしてみてください。誰かが見てくれることを願っています。私はまだ私のものを待ってます。

これはかなりのハックですが、作業を終了してからやり直すことができますActivity。スタックをクリアする可能性があります。

于 2011-03-17T15:01:08.113 に答える
0

Fragment manager で popBackStack() 呼び出しを試しましたか?

于 2011-03-15T06:56:35.797 に答える