2011年07月28日

Android Fragmentsの練習(with M3Navigator)

Android 3.0からサポートされたfragmentsフレームワーク。画面をいくつかの領域に分けて振る舞いを記述できるというもの。せっかくタブレット端末を買ったのに使ってみないのは勿体無いということで、ちょっと遊んでみる。せっかく遊ぶなら実用的な例題でということで、拙作のM3Navigatorをタブレット向けのUIへ移植してみた。

いきなり表示例。
fragments.png
左側にリスト、右側に詳細表示。この辺りはgmailの画面構成とかと同じ…というか、Android SDKのfragmentsサンプルまんまである。実際に、レイアウトや画面の遷移は大きくサンプルから流用している。

概論:意外と簡単。 既存のAndroidアプリをfragments対応するのは大変じゃないかとビビっていたが、実際のところ、タブレットっぽく見せる程度の改造はそれほど難しくなかった。ただし、MVCアーキテクチャ(モデルとビューとコントロールを切り分けようというUI設計の基礎論)に沿って設計することが大事だと思う。

レイアウト:条件付レイアウトフォルダを活用すべし。 タブレットっぽいUIの醍醐味は、傾けると変化するレイアウト。縦版と横版のレイアウトを作ることで、フレームワーク側でよしなにやってくれる。フラグメントを動的に切り替えていく箇所(上図右サイドとか)は、frameLayoutで仮のスペースを確保しておく。で、そこに生成したfragmentをアタッチする。

アクティビティの処理:フラグメントに移植、インテントの扱いに注意。 アクティビティのonCreateなどに書いていた処理は、fragmentの相当物に移動させれば大体うまくいく。ActivityやContextが必要な時は、Fragment.getActivity()を使えばよい。注意すべきはプロセス間通信。ActivityはIntentでやり取りするが、Fragmentの引数はBundleである。Intent.getExtras()を使って、中身のBundleだけを取り出してFragmentに食べさせればよい。

ビューの扱い:ビューの組み立てはonCreateViewでやる。 Activityでは初期化処理を全部まとめてonCreateに書くので、ちょっとコードの整理が必要かもしれない。

データベースの扱い:そのまんま。 とくに手を入れるべきところは無い。SQLiteもPreferenceも使える。

ボタンイベント:FragmentでListenerを継承、または無名クラスを利用。 無名クラスを使うとおそろしく捗る。直感的に理解しがたいが、インナークラスのコードからアウタークラスのメンバに触れるのだ。しかし、Cに慣れた身としては、メソッドの引数が納まる位置にクラス定義が鎮座しているのは落ち着かない。

あとは、メニューフラグメントとかも試してみたいと思う。そのうち時間をとってやってみる。

posted by yuji_at_radiance at 00:18| Comment(0) | TrackBack(0) | ソフトウェア | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。