質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

2回答

2994閲覧

Fragment内での通信処理について

退会済みユーザー

退会済みユーザー

総合スコア0

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

1クリップ

投稿2015/06/16 10:51

現在、画面内にListViewを持ち、Listの要素はサーバから取得して表示するFragmentを作成しています。
具体的には、最初に企業の大業種の一覧リストからいずれかを選択すると、画面が遷移して、今度は小業種の一覧リストが表示され、最後に該当する企業の一覧が表示された画面へ遷移するというようなイメージです。

大業種も小業種も企業もマスターデータがサーバ上にあり、画面を表示するFragmentのonCreateViewメソッドで表示すべきデータの取得を行う実装をしており、また画面の遷移については、OnItemClickメソッド内で、

lang

1getFragmentManager().beginTransaction() 2 .replace(R.id.container, CompanySmallCategoryFragment.newInstance()) 3 .addToBackStack(null) 4 .commit();

このように、遷移後もバックボタン押下で前の画面に戻れるようにしております。

Fragmentのライフサイクルを考えれば当たり前なのですが、
例えば、小業種一覧画面からバックボタンにより大業種一覧画面に戻った際に、当然再度onCreateViewが呼ばれてしまうため、再度サーバへ大業種データを取得しにいってしまいます。
更新頻度が低いデータのため、何度も同じ情報をサーバと通信するのは無駄なので抑止したいのですが、
このような場合、通常はどのように実装するのが一般的なのでしょうか。

onCreateView内で一度取得したデータをBundle等に詰めて保存しておき、
バックボタンで戻ってきた際はgetArguments()を確認して、保存済みデータがあればそれを再利用というのが王道でしょうか。
もっと効率のよい方法もしくは正しい方法がありましたら、ご教示いただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

onCreateViewではなく、onStart等でサーバーからデータをロードしてみてはいかがでしょう。
onStartでしたら、バックスタックから呼び出されてもコールされなかったと思います(念のためご自分で調べてください)。
私が通信を伴う画面をpush/popするようなものを作る時は、以下のような感じにしてます。

・onCreateViewでは各Viewのインスタンス化と基本的な初期化、Fragmentのインスタンス変数への代入等のみ。
・onStartでロードインジケータ的なViewを表示する。同時にスレッドを生成し、データをロードさせる。
・データのロードが完了したら、view.post等でUIスレッドにてロードインジケーター等を消して、ListViewにロードしたデータに関連したadapterを紐付ける。

投稿2015/06/16 19:42

terushu

総合スコア358

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

通信データ取得用のクラスを作るのが一般的かと思います。
○○Daoクラス
クラス(画面)作成時に通信をしておき、Daoに値を保持
以降、画面が変わらない限り通信はしない、Daoを参照する
といったところでしょうか

投稿2015/06/16 11:11

MasaakiIrie

総合スコア1021

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問