Fragment を使ってみよう

Preview:

DESCRIPTION

 

Citation preview

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