質問: 例えばスマホ(縦)、(横)、タブレット(縦)、(横)の4つのレイアウトフォルダを作ることで実装するとします。 そしてそれぞれのレイアウトは * スマホ(縦) `Fragment A`,`Fragment B` * スマホ(横) `Fragment A` * タブレット(縦) `Fragment A`,`Fragment C` * タブレット(横) `Fragment A`,`Fragment D`,`Fragment E` となっています。 この内、`Fragment A`以外のフラグメントは`View`の表示内容にHttp通信で得られるデータを用います。 その、Http通信には`Volley`ライブラリを用います。 `Volley`ライブラリはリクエスト時に`ApplicationContext`が必要です。 この場合はどこでHttpリクエストをしたらよいのでしょうか。 例えば、親の`Activity`の`onCreate()`内でリクエストした場合、`Fragment`側にデータを送ることはできると思うのですが、すでに`Fragment`側の`onCreateView()`が終わっているはずなので`View`をセットすることがでないと考えられます。 また、`Fragment`でリクエストするとしましたら、`Fragment`側の`onCreateView()`では、まだ`Activity`の`onCreated()`が終わっていないため、`ApplicationContext`を取得できないと考えられます。 こういった場合の実装方法を教えてください。よろしくお願い致します
回答: やりたい事が「通信して表示」なので、`Loader`を使って次のように実装するのはどうでしょうか? 1. 各`Fragment`の`onActivityCreated()`で、`LoaderManager`を取得し、`initLoader()`で初期化 2. `initLoader()`の引数で指定する`LoaderCallbacks`の`onCreateLoader`で、「リクエストを`Volley`で投げて、データを取得する`Loader`」を生成 3. 生成した`Loader`内で`Volley`を使ってリクエストを投げる。`Loader`のコンストラクタには`Context`があるので、`ApplicationContext`は取得できる 4. リクエストの結果を`deliverResult()`で伝える。 5. `LoaderCallbacks`の`onLoadFinished()`が呼ばれるので、`View`にそのデータをセットする