現在、私は1つのアクティビティを持っており、その中にフラグメント(検索、曲の詳細、設定など)が追加されています。サイドベースのメニューナビゲーションを実装しました。そのため、副作用として、バックスタックに追加されるフラグメントの数に制限はありません。 フラグメントの数を制限したり、古いエントリを削除する方法はありますか?たとえば、それぞれの曲の詳細の断片には、お勧めの曲のリストがあり、それを通して別の曲の詳細の断片に行くことができます。バックスラックには30個の断片があります。DDMSを開いていると、ヒープサイズがゆっくりと(しかし確実に)増加することがわかります。Android - バックスタックのフラグメント数を制限しますか?
編集:私がしようとしたことの1つは、サイドメニューオプションの1つをクリックした場合、そのフラグメントが既にバックスタックにある場合、新しいフラグメントをインスタンス化する代わりにそのフラグメントに戻ることですユーザーが「ソングの詳細」ページにいる場合は、「戻る」を押すとその部分に移動し、機能しなくなることが期待されます。
編集2: これは(フィルの提案と一緒に)私のaddFragment方法である:
public void addFragment(Fragment fragment) {
FragmentManager fm = getSupportFragmentManager();
if(fm.getBackStackEntryCount() > 2) {
fm.popBackStack();
}
fm.beginTransaction()
.replace(R.id.fragment_container, fragment).addToBackStack("")
.commit();
}
私はちょうどそれを試してみました、そして私のフラグメント履歴を仮定することである:A-> B-> C-> D、 Dから戻ると、B→A→出口に進みます。
A-> B-> C-> D-> E-> F-> G-> Hとなり、同じことが起こった:H→B →A→出口。
すべてのフラグメントが上記の方法で追加されています。私が見たいのは、H-> G-> F->出口です。
myFragはどこから来ますか?新しいフラグメントを追加しようとしているときにこのコードを実行していると仮定すると、以前のすべてのフラグメントへの参照を既に持っている必要がありますか? – StackOverflowed
これは単なるコード例ですが、myFragは、たとえば、現在アクティブなFragmentである可能性があります。このコードは、if文の中でfm.popBackStack()を呼び出すだけでも動作します。 –
あなたは正しい軌道に乗っているようですが、最も古い断片を削除したいと思います。詳細は編集を参照してください。これまであなたの助けに本当に感謝しています。 – StackOverflowed