Calendar」の24日目の記事です。「みんコミ」のAndroidアプリ(バージョン1.0.3)をベースに執筆しています。Store」からアプリをインストールしておくことをお勧めします。サンプルコードのonCreateメソッド内でFragmentを初期化する処理を、Activityの再生時には実行しないように変更してあります(savedInstanceStateで判定)]現在の「みんコミ」アプリでは画面の遷移にはAcrivityが使われていて、Fragmentは使われていない様子です。昨日みんコミに遊びに行ったときに聞いた限りでは、画面の遷移をFragmentも使うように切り替えようとしている様子でした。試しに下タブバージョンのUIをFragmentの切り替えができるようにしたサンプルコード(MainActivity)をGitHub作ったので置いておきます。https://github.com/keiji/adventcalendar_2015_mincomi作ってみた感想として、ランキング画面の下タブと上タブが同時に現れる部分が少しややこしい印象でした(動画です)。https://blog.keiji.io/wp-content/uploads/2015/12/device-2015-12-23-230647.mp4スクロール量に応じてToolbar周りを調整するにはNestedScrollViewに入れなければなりませんが、そのままではViewPagerの高さが0になって、きちんと操作できません。NestedScrollViewにandroid:fillViewport="true"を設定することで、期待通りに動くようになりました。</RelativeLayout></android.support.v4.widget.NestedScrollView>あと、下タブにしているとやはりViewPagerを使った作品バナーはホーム画面だけでいいですね......すべてのページ表示されているのは、自分で作っておいて「やり過ぎだな」と思いました......さて、Fragmentと聞いて思い出すのがこの記事です。Fragment使う人に最低限、知っておいて欲しいこと2014年の2月、ぼくはこんなタイトルのブログ記事をアップしました。使い方」でたどり着く人が多いようです。実に申し訳ない限りです。記事の内容は不十分で、また今はもう古くなっている部分があります。あれから1年と10ヶ月が経ち、現在ぼくがFragmentを使うときに気をつけていることーー「Fragment使う人に最低限、知っておいて欲しいこと」についてまとめていきます。Fragmentを呼び出しているActivity固有のメソッド・メンバ変数を参照してはいけないこれは今でも重要です。呼び出し元を型チェックも無しにキャストしていたら別のActivityで使うことができません。呼び出し元をキャストしてメソッドを呼び出すのではなく、面倒でもCallbackを経由してActivity側とのやりとりをしましょう。ListenerやCallbackを見れば、そのFragmentがどんな情報をやり取りするのかわかるようにすると、後々の可読性も上がるというのも、今でも使えるTipsです。Listener/Callbackの設定タイミングListener/Callbackは、必ずFragment#onAttach内で設定して下さい。activity)内でactivityをinstanceofし、Listenerが実装されている事が確認されたタイミングがベストです。FragmentをロードするActivityから明示的に`setListener`をすることも出来ますが、その場合、Fragmentのライフサイクル、再生成時の挙動には注意してください。再生成時に確実にsetListenerが実行されるようにしなければ、イベントをActivityで受けることが出来ません。以前はこう書きましたが、setListenerのようなメソッドでActivity側から設定しようにも、onAttachと同等のタイミングに該当するライフサイクル・メソッドが存在しません。Listener/CallbackはActivityからではなく、Fragment側で受け取るようにして下さい。activity)はdeprecated-非推奨になりました)。context)をオーバーライドしてください。activity)を使う必要があります。Libraryに含まれるFragment(android.support.v4.app.Fragment)を使っています。context)を使うように統一できます。Fragmentのインスタンス生成はクラスメソッドに任せるのがおすすめActivity同様、Fragmentも再生成される場合があります。再生成時には引数無しのコンストラクタが使われます。引数無しのコンストラクタを用意していなかっったり、Fragmentのパラメーターをコンストラクタの引数を使って与えているとエラーが発生する可能性があります。引数のない空のコンストラクタがない}僕は、Fragmentのインスタンス生成はActivityで行わず、それぞれのFragmentにnewInstanceメソッドを用意して、そちらに任せるようにしています。}}Bundleにパラメーターを設定して、setArgumentsで設定しておくと、Fragmentの再生成時にパラメータを確実に渡すことができます。Bundleを使ったパラメーターの受け渡しは、Activityなど外側のクラスからもできます。内部(この場合onCreateView)でどのようなキーやパラメーターの型を意識する必要があります。newInstanceメソッドを用意すれば、引数の型に合った値を設定するだけで、キーに指定するについては意識する必要がないというメリットがあります(オプショナルなパラメーターについてもメソッドのオーバーロードで対応可能です)。Fragmentのサンプル(MainActivity)を含めたコードをGitHubに置いておきます。参考になれば幸いです。https://github.com/keiji/adventcalendar_2015_mincomi「有山圭二」は「みんなのコミック」及び運営の「株式会社イーブックイニシアティブジャパン」とは一切関係がありません。本アドベントカレンダーの内容はあくまで参加者個人の見解です。「みんなのコミック」の評価を目的とするものではありませんので、ご了承下さい。みんコミには、僕が普段からお世話になっている根雪れい(@neyuki_rei)さんも連載していますね!おかあさん(10)と僕。根雪れい.おかあさん(10)と僕。2015古いアパート「よつば荘」の新しい入居者「まりも」を待っていたのは、個性溢れる4人の女の子たち。これから楽しい生活が始まると思いきや、実はアパートには大きな秘密があって......どんな秘密かは、是非作品を見ていただきたいのですが【本日更新!】若杉佳先生の『まりもな日々』2話更新しました!幽霊が出ないように自力でアパートをなんとかしようとするまりも。2015......。気を取り直していきましょう。他作品に比べて登場人物が格段に多いのが特徴です。主人公の「まりも」に入居者4人の総勢5人、人間じゃないのを入れると6人です。この人数を取り回すのは相当大変だと思いますが、一話からきちんと個性や人間関係を伝えられているのはすごいですね。残念ながら眼鏡っ娘の存在は確認できていませんが......今後が楽しみな作品です!それでは明日25日の担当は、1年前の自分のコードや設計を見ると、酷すぎて思わず焼き捨てたくなってしまう「有山圭二」さんです。