2011年05月02日

もしわたしがAndroidのFragmentを使ったら


さて、だいぶ更新あいちゃったけど、

Fragment APIを一通り使ってみたので、書いてみようと思うの。

いつものように、普通のその辺のチュートリアル記事とかじゃおもしろくないので、

わざとそれとは違うことを書くですよ。




まず、よく見るのは、Fragment使うと、UIがとっても便利!みたいな話だよね。

これは、たしかにタブレットなAndroidで重要で、そのためにFragmentが作られたみたいだし間違ってはいない……気がする。

でも……、見た目ばかり先行しちゃって、重要なことが本当に理解はされていないと思うんだよね。

つまりね、一番重要なのは、「ライフサイクル動作までの単位で再利用を可能にしたこと」だと思うの。




Dialogを例にしてみるよ。

今まで(Fragment APIが出るまで)は、Dialogは拡張できたけど、そのライフサイクル依存な動作は、Activityに書くしかなかったよね。

えっと、onResumeで決まった動作をするDialogとか作りたくても、その部分だけは、Activityに記述するしかなかったの。

同じような処理をいろんなアクティビティでやりたければ、Activityごとに全部書かないといけなかったってこと。

これはとっても再利用しにくいよね。




で、Fragmentがあるとどうなるかっていうと。

Fragmentにもライフサイクル機能があるから、onResumeでのその決まった動作は、ActivityじゃなくてFragmentの方にかける。

ってことは、Activityにはそのコードがなくなる。つまり、Activityごとに書いてた処理が一つのFragmentに寄せられるってわけ。

ライフサイクルのプラグインって感じね。まぁ、実際コード見ると、ActivityのonResumeで、FragmentのonResumeが呼ばれているわけだけど(笑)

これで、必要なコードは一カ所にまとめられて再利用しやすくなるの。




あ、そうそう、注意点があるよ。

あくまでもこれは、Activityに寄せられてたライフサイクルの記述をFragmentと言う単位に切り出せるようになっただけ。

よくListViewがListFragmentになるように見られることがあるみたいだけど(、まぁ、それは間違っていないんだけど)、

実際には、Activityに書かれてたコードがFragmentに寄るだけで、UIをカスタマイズしたらそのコードはFragmentとは別に用意することになる。

「Activity→Fragment→View」ってなるかな。クラスはFragmentの分増えるってこと。

間違えないようにしないとね。




もう一個重要なのは、上に書いたことから、ViewがないFragmentも作れるってこと。

ライフサイクルに沿ったバックグラウンド処理とかが、Acitivityから切り離したと言う意味で再利用可能な形で作れるってことだよ。

むしろ今は、こっちの方が重要な気がする(笑)




何でかっていうと、Fragment、なんかアニメーションがおかしいんだよね。

普通に設計ミス?みたいな感じがしてるけど(笑)

一応、「Android Issue 15623」あたりでググれば出てくると思うよ♪




適当にやってきた感じをまとめると以下のような感じかなー。あくまで個人的な感覚だからね〜(゜▽、゜

1.ダイアログ表示は積極的にDialogFragmentを使うようにする。

2.ListViewはライフサイクル制御が必要なときだけFragmentにすればok無駄にFragmentにする必要はない。

3.ライフサイクルに依存したバックグラウンド処理はFragment使うといい感じ。

4.アニメーションしたいなら、Issue 15623あたりに注意する。


タグ:android
posted by すふぃあ at 14:17| Comment(1) | TrackBack(0) | 雁字