9

私はこのコードを使用して、バックスタックをメインビューまでクリアしています。

while(mFragmentManager.getBackStackEntryCount() > 1) {
            mFragmentManager.popBackStack(null, 0);
}

このコードは以前は機能していたと確信していますが、バックスタックカウントは変更されず、フラグメントは削除されません。これにより、whileループが実行され続けるため、メモリ不足の例外が発生します。

何か問題があるのか​​、SDKツールの最新リビジョンにバグがあるのか​​、誰か知っていますか。何が問題を引き起こしているのかわかりません。

4

4 に答える 4

7

.executePendingTransactions();後にも使用できますpopBackStack();

于 2013-06-12T11:31:41.630 に答える
6

popBackStack()あなたのループがそうであるように見える、それがすぐに効果があるとは確かに思いません。

于 2013-01-22T12:47:43.720 に答える
3

ドキュメントの説明 popBackStack():

指定された識別子を持つものまでのすべてのバックスタック状態をポップします。 この関数は非同期です。要求を pop にエンキューしますが、アクションはアプリケーションがイベント ループに戻るまで実行されません。

したがって mFragmentManager.popBackStack(null, 0);、イベントが完全に処理されるまで、バックスタックが空にならなくなります。

popBackStackImmediate()現在のイベント自体ですぐに空にするために使用します。

于 2014-07-15T06:00:38.040 に答える