現在、1 つのアクティビティがあり、それにフラグメントが追加されています (検索、曲の詳細、設定など)。サイド ベースのメニュー ナビゲーションを実装したので、副作用として、バックスタックに追加されるフラグメントの数に制限がなくなりました。フラグメントの数を制限したり、古いエントリを削除したりする方法はありますか? たとえば、各曲の詳細フラグメントには推奨曲リストがあり、それを介して別の曲の詳細フラグメントに移動できます。バックスタックに 30 個のフラグメントを持つことは簡単に可能です。DDMS を開いている場合、ヒープ サイズがゆっくりと (しかし確実に) 増加していることがわかります。
編集:私がやろうとしたことの1つは、ユーザーがサイドメニューオプションの1つをクリックした場合、そのフラグメントがすでにバックスタックにある場合、新しいフラグメントをインスタンス化する代わりにそのフラグメントに戻ろうとすることですが、もちろん、ユーザーがが曲の詳細ページにある場合、[戻る] を押すとそのフラグメントに移動すると予想されるため、機能しません。
編集2:これは私のaddFragmentメソッドです(Philの提案とともに):
public void addFragment(Fragment fragment) {
FragmentManager fm = getSupportFragmentManager();
if(fm.getBackStackEntryCount() > 2) {
fm.popBackStack();
}
fm.beginTransaction()
.replace(R.id.fragment_container, fragment).addToBackStack("")
.commit();
}
試してみたところ、Fragment の履歴が A->B->C->D で、D から戻って B->A->exit と仮定しました。
テストするために 8 レベルの深さを調べました: A->B->C->D->E->F->G->H、そして H から戻ると、同じことが起こりました: H->B->A- >終了します。
すべてのフラグメントは、上記の方法で追加されます。私が見たいのは、H->G->F->exit です。