Fragment を使ってみよう
-
Upload
yuki-anzai -
Category
Technology
-
view
14.293 -
download
4
description
Transcript of Fragment を使ってみよう
GDD Bootcamp 2011
Fragment を使ってみようあんざいゆき
1
自己紹介
✤ あんざいゆき - 株式会社ウフィカ (uPhyca)
✤ Blog : Y.A.M の雑記帳 (y-anz-m.blogspot.com)
✤ 本 : Android Layout Cookbook
✤ Twitter : @yanzm
✤ Android 女子部 副部長
✤ GTUG Girls マネージャー
2
Fragment
フラグメント3
「Fragment ってタブレット対応のやつですよね?」
4
「Fragment でタブレット対応するってどういうこと?」
5
ハンドセット
6
タブレット
情報量が足りない
→ layout-xlarge で文字や画像を大きくするだけでは解決できない7
情報量を増やすには、ハンドセットで別の画面になっているものを一緒に
表示するしかない!
8
各画面のレイアウトを合わせたレイアウトファイルだと...
<LinearLayout ...> <include layout=”@layout/main1”/> <include layout=”@layout/main2”/></LinearLayout>
各Activity内のロジックはどうする?
9
動的に Activity をくっつけられないでも同じロジックとレイアウトだから使い回したい
ロジック + レイアウトで使い回せる状態がいい
10
各画面をFragmentにすれば...
<LinearLayout ...> <fragment android:name=”...Fragment1”/> <fragment android:name=”...Fragment2”/></LinearLayout>
ロジックもついてくる!
Fragment1
レイアウト+
ロジック
Fragment2
レイアウト+
ロジック
Fragment1
レイアウト+
ロジック
Fragment2
レイアウト+
ロジック
Fragment なら動的に Activity に追加/削除/入れ替えができる
11
2画面対応 デモ
12
「ハンドセット向けのアプリなので、Fragment 使う利点ないですか?」
13
あります!
14
例えば...
特定のViewにだけ関連するロジックがある場合
それぞれをFragment 化
- 1つのUIコンポーネントして使い回せる- Activity のコードがすっきり
XMLをとってきてパースして表示
GETリクエストの結果を表示
URLから画像をダウンロードして表示
15
例えば... iosched
DashboardFragmentダッシュボード用のレイアウトと遷移の処理
WhatsOnFragmentカウントダウンを表示
16
例えば...
Activity のライフサイクルに合わせて処理をしたいとき
onPause(), onResume() で- IntentFilter の regist / unregist
- ContentObserver の regist /unregist
- など
17
例えば...
縦横でレイアウトを変える場合- どちらかの画面にだけ出てくる UI がある場合 → Fragment なら Fragment自体 の追加/削除で レイアウトとロジック両方とも処理
Fragment1Fragment1 Fragment2
18
例えば...
同じActivityでレイアウトを変える場合- setContentView() だと、前のViewの状態は保存されない → Fragment を使って、置き換えられる Fragmentをバックスタックに保持 → 状態がそのまま保存される
19
例えば...
タブレイアウト
Android 3.2 から ActivityGroup, LocalActivityManager は
deprecated に → TabHost を使った複数Activityのタブが使えない
- Fragment を使ってタブを実現- ActionBar.Tab
20
例えば...
ListView + 1行用のカスタムView + カスタムAdapter
カスタムListFragment
View と ロジックが1つのクラスになってるので再利用しやすい
21
「つまり Fragment って?」
22
Fragmentは再利用可能なUIコンポーネントを作成しやすくするもの
23
これまで
Activity - View
これから
Activity - Fragment - View
Fragment = ライフサイクル + ロジック + View
Activity と View の中間みたいな...
24
「カスタムViewじゃだめなんですか?」
25
カスタムView- 複数のViewをまとめて1つのViewとしてあつかう- 独自の描画のウィジェットを作る
カスタムViewの限界- あくまでViewの描画とそれに関するロジックにとどまる(べき)
- バックグラウンドでネットワーク通信するようなロジックはカスタムView に入れるべきではない
- View を持たないロジックだけのコンポーネントを作れない
26
カスタムViewの限界を補うために
Activityに書いていたロジックを持てるようになったのがFragment
27
Fragmentの特徴
✤ View + ロジックの再利用可能なコンポーネントを作れる
✤ View を持たない、ロジックだけの再利用可能なコンポーネントも作れる
✤ Activity のライフサイクルと関連するライフサイクルを持つ
✤ バックスタック機能
28
Fragmentの特徴
✤ 1つのViewのようにレイアウトXMLファイルに書ける( <fragment> タグ)
✤ 複数のViewを持ってそれぞれをコントロールできる
29
Fragmentのいまいちな所
✤ カスタムViewと同じように完全修飾名でレイアウトXMLファイルに書くので...
✤ グラフィカルエディタで正確に再現できない場合がある
✤ クラス名がレイアウトエディタ上で自動補完されないので、タイポによるエラーを起こしやすい
30
「でもFragmentって3.0以降じゃないと使えないんでしょ?」
v4 Support Library を使えば 1.6 から使えます
31
「どこまでこれまでのViewとActivityにやらせて、どこを新しくFragmentに
やらせればいいの?」
32
✤ View or カスタムView
✤ 描画とそのための最低限のロジック
✤ Fragment
✤ View + そのViewに関連するロジック(Viewの操作やViewに表示するデータの処理)
✤ Activity
✤ それ以外。ActivityとFragment間のデータの受け渡し、複数のFragment間のデータの受け渡し、Window の設定などActivity に関連するロジック
33
ありがとうございました
34