1

ここに私の問題領域があります:

フラグメント A があります。それがアタッチされると、onCreateView で Web サービスをロードしてサーバーからデータを取得し、その後、ベース アダプターを使用してリスト ビューにそのデータを設定します。リスト ビューのアイテム クリックで、フラグメント トランザクションの replace メソッドと addtoBackstack("FragmentA") を使用して、フラグメント A をフラグメント B に置き換えます。

FragmentManager fm =getActivity().getFragmentManager();
fm.beginTransaction().replace(R.id.content_frame, Fragment B).commit();

ここで、フラグメント B の [戻る] ボタンを押すと、フラグメント A に移動しますが、Web サービスは再び読み込みを開始します。

私の問題:フラグメントAに戻ったときに、以前の状態を表示し、Webサービスを再度呼び出さないようにしたいだけです。

ありがとう

4

1 に答える 1

0

フラグメントの OnCreateView は、描画が必要になるたびにビューの作成時に実行されます。戻ると、ビューが再作成されるため、Web サービスが再度読み込まれます。

Web サービスを一度だけロードしたい場合は、代わりにコードを「onCreate」メソッドに移動できますが、このコードを代わりに「onResume」に移動し、 Web サービスを再度ロードする必要があるかどうか。

このようにして、フラグメントが一時停止されてから再度ロードされるたびに、フラグメントに必要なものがすべて含まれていることを確認できます。

フラグメントのライフサイクル
(ソース: xamarin.com )

編集:

たとえば、

 @Override
 public void onResume() {
 super.onResume();  // Always call the superclass method first


 if (data == null) { //Or list is empty?
    getWebData()
 }
}
于 2015-05-03T02:18:48.777 に答える