私の Android アプリケーションには、リスト ビューとリスト アイテムの詳細ビューがあります。
リストビューと詳細ビューは、1 つのアクティビティ内のフラグメントです。最初にリスト フラグメントをアクティビティにロードし、ユーザーがリスト アイテムをクリックすると、同じビューが詳細フラグメントに置き換えられ、そのフラグメントが 1 つのアクティビティ内のバックスタックに追加されます。
コード:
String backStateName = fragment.getClass().getName();
String fragmentTag = backStateName;
FragmentManager manager = activity.getSupportFragmentManager();
boolean fragmentPopped = manager.popBackStackImmediate (backStateName, 0);
if ( !fragmentPopped && manager.findFragmentByTag(fragmentTag) == null){
FragmentTransaction ft = manager.beginTransaction();
ft.replace(R.id.main_place_holder, fragment, fragmentTag);
ft.addToBackStack(backStateName);
ft.commit();
}
ユーザーが戻るボタンをクリックすると、リスト ビューになるので問題ありません。
だから私の問題は、ユーザーがリストアイテムアプリを数回(10回以上)クリックするとOutOfMemoryでクラッシュすることです
私が検索したところ、これはバックスタックの通常の動作であり、追加されたフラグメントがスタックからポップされたとしても、メモリから追加されたフラグメントがクリーンアップされないと言う人がいます。
ビジネス要件のため、これに 2 つのアクティビティを設定することはできません。
リストと詳細のフラグメントが同じアクティビティを持ち、バックスタックを使用してナビゲートするのが最善の方法ではないという私のアプローチではありませんか?
そうでない場合、私が従うべき最善の選択肢は何ですか?