フラグメントコンテナレイアウトのアクティビティがあり、そのレイアウトでリストビューを持つフラグメントAをロードします(リストビューはWebからデータをロードします)。リストビュー項目をクリックすると、詳細ビューが表示されます。そのために、詳細フラグメントである別のフラグメント B をロードしています。今それを行うために最初に使用しました
FragmentTransaction ft = ((FragmentActivity) context).getSupportFragmentManager().beginTransaction();
ft.replace(R.id.fragmentsContainerLayout, new ScheduleDetailsFragment());
ft.addToBackStack(null);
ft.commit();
しかし、置換を使用して、リストビューを含む前のフラグメント A を削除し、再度押し戻すと、フラグメント A の onCreateView メソッドとそのリストビュー データがリロードされます。バックプレスでフラグメントAを再度ロードする(またはWebサーバーに呼び出しを送信する)のを防ぎたい。フラグメント A の状態とそのリストビューのスクロール位置を維持したい。それを行うために、私は2番目のオプションを使用しました
FragmentTransaction ft = ((FragmentActivity) context).getSupportFragmentManager().beginTransaction();
ft.add(R.id.fragmentsContainerLayout, new ScheduleDetailsFragment());
ft.addToBackStack(null);
ft.commit();
add() を使用すると、フラグメント B がフラグメント A の上にロードされ、フラグメント A は引き続き表示されます。両方のフラグメントが重なり合って透明になっていることがわかります。また、show() および hide() メソッドを使用する別の解決策にも出会いました。しかし、それがそれを達成するための効率的な方法だとは思いません。誰でも効果的な解決策を提案できますか?