SlideShare 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

PPT
Android Hacks - Hack40
PDF
Tips for you tube
PDF
Meteor勉強会発表資料「MeteorでiOSアプリを作ろう!」
PDF
Nuxt.js入門 2018/02/02 Vue.js入門勉強会@渋谷 発表資料
PPT
Android Hacks - Hack8
PPT
Android Hacks - Hack59
PDF
Wantedlyを2年間Herokuで運用した話
PDF
Herokuトレーニング
Android Hacks - Hack40
Tips for you tube
Meteor勉強会発表資料「MeteorでiOSアプリを作ろう!」
Nuxt.js入門 2018/02/02 Vue.js入門勉強会@渋谷 発表資料
Android Hacks - Hack8
Android Hacks - Hack59
Wantedlyを2年間Herokuで運用した話
Herokuトレーニング

What's hot (20)

PDF
WantedlyがまだSendGridを使いこなしてない話
PDF
Titanium もくもく会第6回 Kii Cloud と TiGPUImageView
PDF
Azureで実装する話題のコンテナサービス
PDF
How to create your own Azure Pipeline's image
PPTX
Eggplant Functional - Lesson 6 (Japanese slides)
PDF
Meteorというフレームワーク
PDF
エンタープライヤーのためのWeb Componentsハンズオン
PDF
Ignite 2021 振り返り(DevOps)
PDF
Quickcursorに見る、アプリケーション間通信
PDF
クラウド+コンテナで作る簡単Webアプリケーション
PDF
Introduce TFSUG and Azure DevOps Server 2020
PDF
Android アプリ開発における Gradle ビルドシステム
PDF
Wantedly - 世界一"いいね!"される 求人サイトの作り方
PPTX
とりあえずAngular jsを導入してみませんか
PDF
AndroidStudioはじめました ~Gradle編~
PDF
Azure boards for beginners
PDF
Ride on Azure! 詳細編
PDF
Azure DevOps's security
PPTX
Gcpug begginers #1LT startup scriptとshutdown script
PDF
Azure DevOps Online Vol.3 - Inside Azure Pipelines
WantedlyがまだSendGridを使いこなしてない話
Titanium もくもく会第6回 Kii Cloud と TiGPUImageView
Azureで実装する話題のコンテナサービス
How to create your own Azure Pipeline's image
Eggplant Functional - Lesson 6 (Japanese slides)
Meteorというフレームワーク
エンタープライヤーのためのWeb Componentsハンズオン
Ignite 2021 振り返り(DevOps)
Quickcursorに見る、アプリケーション間通信
クラウド+コンテナで作る簡単Webアプリケーション
Introduce TFSUG and Azure DevOps Server 2020
Android アプリ開発における Gradle ビルドシステム
Wantedly - 世界一"いいね!"される 求人サイトの作り方
とりあえずAngular jsを導入してみませんか
AndroidStudioはじめました ~Gradle編~
Azure boards for beginners
Ride on Azure! 詳細編
Azure DevOps's security
Gcpug begginers #1LT startup scriptとshutdown script
Azure DevOps Online Vol.3 - Inside Azure Pipelines
Ad

Viewers also liked (9)

PDF
Designing Auto Generated Codes
PDF
Android Pen Test - Recon -
PDF
Upload a screenshot to Slack
PDF
Android development at mercari 2015
PDF
Android Clean Architecture for Dummies
PDF
XAML入門
PDF
Android cleanarchitecture
PDF
Debot android debugging library
PDF
Xamarin.forms入門
Designing Auto Generated Codes
Android Pen Test - Recon -
Upload a screenshot to Slack
Android development at mercari 2015
Android Clean Architecture for Dummies
XAML入門
Android cleanarchitecture
Debot android debugging library
Xamarin.forms入門
Ad

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

PDF
Docker + Checkpoint/Restore
PDF
Android4.2徹底解剖!
PPTX
iOSにおけるUIテスト@potetotips
PDF
Tokyo GTUG Bootcamp2010
PDF
Google Apps Scirpt勉強会 #1
PDF
jQuery Mobile
PDF
WildFly Swarm - Rightsize Your Java EE Apps
PDF
Griffon10 in groovy_fx
PPTX
Com camp2014
PDF
Extending the Unity Editor
PDF
Before lunch オプションを使って Flutterでstaging/release環境を切り替える
PDF
冬だからAndroid再入門
PDF
Extending the Unity Editor Extended
PDF
[Cloud OnAir] Google Cloud 主催イベント Anthos Day 情報 2020 年 2 月 13 日放送
PPTX
Azure Functions あれこれ
PPTX
Using the Fragments(Android)
PDF
運用の現場での監視運用ツールの活用
PPTX
React を導入した フロントエンド開発
PDF
I phoneアプリ入門 第3回
PPT
UIImagePickerController よもやま話
Docker + Checkpoint/Restore
Android4.2徹底解剖!
iOSにおけるUIテスト@potetotips
Tokyo GTUG Bootcamp2010
Google Apps Scirpt勉強会 #1
jQuery Mobile
WildFly Swarm - Rightsize Your Java EE Apps
Griffon10 in groovy_fx
Com camp2014
Extending the Unity Editor
Before lunch オプションを使って Flutterでstaging/release環境を切り替える
冬だからAndroid再入門
Extending the Unity Editor Extended
[Cloud OnAir] Google Cloud 主催イベント Anthos Day 情報 2020 年 2 月 13 日放送
Azure Functions あれこれ
Using the Fragments(Android)
運用の現場での監視運用ツールの活用
React を導入した フロントエンド開発
I phoneアプリ入門 第3回
UIImagePickerController よもやま話

More from Hiroyuki Kusu (10)

PPTX
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
PPTX
【YAPC::Asia Hachioji 2016】ES2015のclassでアプリケーションを書いてみた話
PPTX
【Potatotips #30】RxJavaを活用する3つのユースケース
PPTX
【Potatotips #26】Replace EventBus with RxJava/RxAndroid
PPTX
【Potatotips #23】手軽にHTTPでJSONにアクセスできる環境を用意する
PPTX
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
PPTX
【eLV勉強会】AngularJSでのモバイルフロントエンド開発
PPTX
エンジニアにMacを薦める理由
PPTX
ソーシャルアプリで人を熱中させる要素を説明する一枚絵
PPTX
【ABC2014Spring LT】AngularJSでWEBアプリ開発
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
【YAPC::Asia Hachioji 2016】ES2015のclassでアプリケーションを書いてみた話
【Potatotips #30】RxJavaを活用する3つのユースケース
【Potatotips #26】Replace EventBus with RxJava/RxAndroid
【Potatotips #23】手軽にHTTPでJSONにアクセスできる環境を用意する
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
【eLV勉強会】AngularJSでのモバイルフロントエンド開発
エンジニアにMacを薦める理由
ソーシャルアプリで人を熱中させる要素を説明する一枚絵
【ABC2014Spring LT】AngularJSでWEBアプリ開発

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