3

プログラムでフラグメントのバックスタックをクリアする最良の方法は何ですか?

1 つのアクティビティと一連のフラグメントのみを使用して画面ナビゲーションを実装しました。ユーザーをログイン画面に移動させ (ログアウトのタイムアウトが期限切れになると)、すべてのフラグメント履歴をクリアする方法が欲しいのですが、それを行う最善の方法は何ですか? ここでいくつかの答えが見つかりましたが、どれが最適かわかりません...よろしくお願いします!

とりあえずこれ使ってる

public void clearBackStack() {
    FragmentManager fragmentManager = holder.getSupportFragmentManager();

    while (fragmentManager.getBackStackEntryCount() != 0) {
        fragmentManager.popBackStack(null, 0);
    }
}

それでも、時々私は outOfMemoryException を取得しています

4

2 に答える 2

13

これは、現時点ではかなり古い質問です。とにかく、私はあなたのコードを試してみましたが、無限ループになっているようです。

popBackStack(null, 0)null タグを持つフラグメントを検索しますが、これは決して見つかりません。while ループは、メモリがなくなるまで循環します。もう 1 つの問題popBackStackは、pop が必ずしもすぐに実行されるとは限らないため、while ループがしばらく実行される可能性があることです。

タグや ID に関係なくバック スタックからフラグメントを削除する場合は、fragmentManager.popBackStackImmediate()代わりに使用します。

于 2012-11-18T19:17:07.053 に答える
0

FragmentManager.popBackStack()バックスタックをクリアするために使用できます。

fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

これにより、コンテナにロードせずにスタックが空になります。

于 2017-02-16T10:05:08.933 に答える