質問: お世話になっております。 みなさんはこのような場合ActivityとFragmentを使い分けをどのようにしてるのか教えて頂き たく、質問させて頂きました。 ・1つのActivityにいくつのFragmentを定義しますか? 私は1つのFragmentにlayoutしActivityに配置してますので1:1の関係になっています。 ・ダウンロードなどのネットワーク処理はActivityで行いますか?Fragmentで行いますか? 私はFragmentはあくまでUIのみにしているのでActivityで通信をし結果をFragmentに 返しています。Fragment -> Activity -> Fragmentとの処理にすこし疑問を感じています。 ・Activity -> Activity等の画面遷移はどちらが発火しますか? 私はActivityからstartActivityをし、遷移しています。 ・ToolbarやActionBarの定義はどちらに行いますか? 私はToolbarはActivityのlayoutに入れているのですが、やはりFragmentで定義するのが いいのでしょうか? よろしくお願い致します。
回答: あくまでも私の個人的な意見として記載させていただきます。 作成・公開(GPL)しているアプリは1つで、規模は14activities,15Fragmentsで、 インターネットからの情報取得およびDao経由でSQLiteへ保存し、表示するというの貧弱な経験から導き出しているものです。 **概略** FragmentはActivityに乗っているもので、Activityの処理を委譲されているものという認識であるため、 ActivityはFragmentを調定するものという認識です。 **詳細** ・1つのActivityにいくつのFragmentを定義しますか? 1つのActivityに1つの表示領域を設けて、4つほどのFragmentをreplaceしています。 ・ダウンロードなどのネットワーク処理はActivityで行いますか?Fragmentで行いますか? FragmentはAsyncTaskを利用して自分自身でデータを拾ってきます。 FragmentはActivity上に乗っているため、Fragment上でデータを取りに行ったとしてもActivity上での処理と解釈でき、 なにより、処理を内包するため、役割の分割につながると考えています。 (現在仕様を変更してserviceに持っていこうと考えています) ・Activity -> Activity等の画面遷移はどちらが発火しますか? 複数Fragmentが発生することを考慮し、 画面遷移についてはFragment上に配置したレイアウトから発生するため、 ActivityにFragmentから利用されるHandlerを経由してstartActivity等を実行しています。 ・ToolbarやActionBarの定義はどちらに行いますか? Toolbarの定義はActivity側にありますが、メニューやタイトル等の設定はFragmentで行います。 理由はNavigationDrawerを使用するためです。 **経緯** Activityのみで実装していましたが、遷移が複雑になるにつれ、Activityの役割が増えてしまったため、 1つのActivity上で複数のFragmentへreplaceする対応をしました。 その後、ActionBar.Tab なるものがあり、見た目がすっきりするという理由で、Fragmentを組み合わせて実装しました。 しかし、ActionBar.Tab は、API21でdeprecatedとなりました。 開発版はNavigationDrawerを使用して関連するFragmentを1つのActivityで管理するように移行中です。 **結論** 気になって、関連する話題を探したところ、fkmさんの紹介しているスライドと同じような記載を見つけました。 私の意見よりも以下を参照していただいたほうがよいかと思われます。