狠狠撸

狠狠撸Share a Scribd company logo
Activity/Fragment
からControllerへ
処理を委譲する
Hiroyuki Kusu ( @hkusu_ )
株式会社ゆめみ
2015/9/29 Roppongi.aar #1
自己绍介
【Roppongi.aar #1】Activity/FragmentからControllerへ処理を委譲する
DroidKaigiで発表の機会を頂きました。
http://www.slideshare.net/hiroyukikusu/droidkaigi2015androidmvc
作ってます。
https://play.google.com/store/apps/details?id=jp.nailbook
本题
?Activity/Fragmentと同様に、ユーザ操作
を受けつけViewを操作するもの
(ViewController と呼ぶ方がしっくりくるかも)
?Activity/Fragmentの責務をController
に委譲することにより次のメリットがある
- Activity/Fragmentをスリムに
- Controllerの再利用
?1つのActivity/Fragmentに対してController
は複数あっても良い(意味ある単位で作る)
本スライドにおけるControllerの定義
Activity/
Fragment
ControllerControllerController
ViewViewView
new
Viewの操作
Viewの操作
ユーザ操作の
受けつけ
ユーザ操作の
受けつけ
具体的な実装
※今回は Butter Knife (v7.0.1) を使います。
※ Fragmentから利用する場合は onCreateView で生成したビュ
ー
をbindする ? ButterKnife.bind(<Controller>, <ビュー>)
@Activity
Controllerインスタンスを作成し
Butter Knife で Activity を bind
@Activity
Activityのライフサイクルと
Controllerのライフサイクルを
合わせる
@Controller
Viewと変数の関連づけ
Activityのライフサイクルと
同名のメソッドを用意して
ライフサイクル毎の処理
を記述
各Viewのイベント
※ Controllerは普通のJavaのClass
Butter Knife の
ちょっとしたTips
android-apt(https://bitbucket.org/hvisser/android-apt)
を導入すると Butter Knife で生成されたコード
が確認できたり、@onClickアノテーション等
を付加したメソッドに対するIDEによる警告
(未使用)が出なくなったりする。
(動的に決定される等の理由で)レイアウトに存
在しないかもしれないリソースは @Nullable
アノテーションを付加しておくとエラーにな
らない(Butter Knife のバージョンによっては
@Optional かも)。
プラグインが便利
【Roppongi.aar #1】Activity/FragmentからControllerへ処理を委譲する
ほか
?Dagger等でControllerをDIすると良いかも
しれない(未検証)
?Controllerが増えることによりコールバック
まわりが複雑になる問題
? EventBus ですこし楽になる
(疎結合になりすぎないよう注意)
これらはまたの機会に..
サンプルコードをGitHubに置きました。
https://github.com/hkusu/android-controller-delegate-sample
おわり
予备スライド
https://github.com/greenrobot/EventBus から転載
EventBus
EventBus
イベントクラスは普通のJavaのClassなのでデータ
を詰め込める(参照型でも良いがリークに注意)
@通知側
メインスレッド外のスレッドで投げたイベントを
簡単にメインスレッドで受け取ることも出来る
EventBus
通知側(もしくは購読側)の内部クラスとしてイベントク
ラスを作成すればどこから通知される (もしくはどこで
購読される)イベントであるかコード上わかりやすい
※通知と購読の関係が多対多になったら設計を見直す。またイベント
を投げ合う関係もきっと良くない
@購読側
Activity/
Fragment
Controller
Activity/FragmentからController
直にControllerクラスのインスタンスを参照する(interfaceを参照しても良
いがやりすぎ感)
ControllerからActivity/Fragment
?interfaceで参照しコールバック (複数から利用されうる&抽象化の為)
- Activity/Fragmentが死んでるかも&参照が残らないように注意
?もしくはEventBus
- Activity/Fragment ? Controllerが互いを知ってると関係が複雑になる
ので一方は通知的で良い
- 必要あらば通知を受けてActivity/FragmentからControllerへアクセス

More Related Content

【Roppongi.aar #1】Activity/FragmentからControllerへ処理を委譲する