おいしいFragment
           31.3.2012
Takahiro Yoshimura (@alterakey)
自己紹介

こんな人

 埼玉で活動しているアーキテクトです。

 FlashゲームからWebアプリまで。

 Twitterやってます→@alterakey
さて


Fragmentと聞いて

 何を思い浮べますか?

 何に使えるものなのでしょう?
Fragment?

Fragmentとは断片と見つけたり

Activityを機能的に分解する方法

大画面対応だけじゃない!

Android 1.6∼で使えます
大事なことなので


Android 1.6∼で使えます。

Support Package
簡単な例


Activityから他のアプリを呼び出しましょう。

Activity.startActivityForResult()

Activity.onActivityResult()
指針

MainActivity.java(抜粋)

public void onCreate(...) {
    ...
    this.startActivityForResult(intent, REQ_1);
    ...
}
...
public void onActivityResult(int requestCode, ...) {
    if (requestCode == REQ_1) {
        ...
    }
    ...
}
もしもこれが

Activity.startActivityForResult()を複数箇所で
呼び出していたら…?

Activityがもっと複雑だったら…?

カオス!!
指針


見通しを確保するために…

Activityから機能を分離します。

 REQ_1にまつわる部分
指針

MainActivity.java(抜粋)

public class MainActivity extends FragmentActivity {
...
    public void onCreate(...) {
      ...
      getSupportFragmentManager()
          .beginTransaction()
          .add(new RequestOneFragment(), null)
          .commit();
      ...
    }
...
指針

MainActivity.java(抜粋)

...
private class RequestOneFragment extends Fragment {
    private static final int REQ = 1;
    @Override
    public void onCreate(...) {
      super.onCreate(...);
      this.startActivityForResult(intent, REQ);
    }
    @Override
    public void onActivityResult(int requestCode, int resultCode, ...) {
      ...
    }
}
こうすると

「機能」ごとにまとまってすっきりする

同じようなことをしたい時に使い回しが効く
→機能を抽出しているので当然といえば当然…

状態を保存するのにも使える

しかし自動テストの役には立ちにくい…
大画面対応と聞くけど


ActivityからFragmentとしてUIを分離

条件に合わせてレイアウトを読んで、
Fragmentをはめこんで行けば…
(e.g. 狭ければ別Activity、広ければペイン)
まとめ

FragmentはActivityの持つ「機能」のこと

ペイン型UIやタブレットは関係ない

今からでも使える

しかし自動テストの役にはあまり立たない
まとめ

gdgdになりがちだったActivity周辺の見通し確
保にも有効

再利用もできる

ガンガン使おう!
ご静聴ありがとうございました。

おいしいFragment #antama_ws