Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Your First MVVM with RxJava in Android
Search
Elvis Lin
March 20, 2017
Programming
0
780
Your First MVVM with RxJava in Android
Demonstrate how to use RxJava to implement MVVM pattern in Android
Elvis Lin
March 20, 2017
Tweet
Share
More Decks by Elvis Lin
See All by Elvis Lin
Protect Users' Privacy in iOS 14
elvismetaphor
0
41
Dubugging Tips and Tricks for iOS development
elvismetaphor
0
37
Strategies of Facebook LightSpeed project
elvismetaphor
0
51
Background Execution And WorkManager
elvismetaphor
2
470
作為一個跨平台的 Mobile App 開發者,從入門到放棄!?
elvismetaphor
2
420
Dependency Injection for testability of iOS app
elvismetaphor
1
1.3k
Briefly Introduction of Kotlin coroutines
elvismetaphor
1
250
MotionLayout Brief Introduction
elvismetaphor
1
310
Chapter 10. Pattern Matching with Regular Expressions
elvismetaphor
0
36
Other Decks in Programming
See All in Programming
GraphQLサーバの構成要素を整理する #ハッカー鮨 #tsukijigraphql / graphql server technology selection
izumin5210
4
810
Goのエラースタックトレースの歴史と今後
sonatard
6
670
大規模Reactアプリのリアーキテクチャ~8万行のTanStack Query移行の軌跡~
kj455
4
930
⼤規模⾔語モデルの拡張(RAG)が 終わったかも知れない件について
nearme_tech
23
15k
検証も兼ねて個人開発でHonoとかと向き合った話
hanetsuki
0
430
はてなにおける CSS Modules、及び CSS Modules に足りないもの / CSS Modules in Hatena, and CSS Modules missing parts
mizdra
6
900
try! Swift Tokyo 2024のLT枠に採択されたプロポーザルを出すときに考えていたこと
ski
0
350
Snowflakeで眠ったデータを起こそう!
estie
0
110
HUIT新歓2024「競技プログラミング、やってみませんか?」
slephy2784
1
260
What We Can Learn From OSS
inouehi
0
420
効率化に挑戦してみたらモバイル開発が少し快適になった話
ryunakayama
0
120
GitHub Copilotのススメ
marcy731
0
190
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
658
120k
The MySQL Ecosystem @ GitHub 2015
samlambert
242
12k
How To Stay Up To Date on Web Technology
chriscoyier
782
250k
Bash Introduction
62gerente
604
210k
Agile that works and the tools we love
rasmusluckow
324
20k
Making the Leap to Tech Lead
cromwellryan
123
8.5k
The Power of CSS Pseudo Elements
geoffreycrofte
59
5k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
1
1.3k
We Have a Design System, Now What?
morganepeng
42
6.7k
Web development in the modern age
philhawksworth
202
10k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
20
1.6k
Large-scale JavaScript Application Architecture
addyosmani
504
110k
Transcript
使⽤用 RxJava 實作 MVVM 模式 Elvis Lin 2017-03-20 @Android
Taipei
Agenda • MVC 與 MVP 回顧 • MVVM 簡介 •
⽤用 RxJava 實作 MVVM
MVC/MVP回顧
MVC Model - View - Controller
View Controller Model User Input Update Model Query Data Update
UI Dispatch Event
View Controller Model User Input 1 … 1 Activity
View Controller Model User Input Update Model Query data Update
UI Inform about input Notify view
View Controller Model 1 … 1 View Inferface
MVP Model - View - Presenter
View Presenter Update UI Inform User Action
View Presenter Model 1 … 1 IView IPresenter Contract
interface IView { void setCapital(String capital) }
interface IPresenter { void onLoad(); }
MVVM簡介
MVVM Model - View - ViewModel
View ViewModel Model 1 … * View ViewModel Model *
… *
• View 向 ViewModel 註冊 • ViewModel 不主動更更新 View •
ViewModel 不知道 View 的存在 • 實作⽅方式: • Data-binding • RxJava
RxJava 簡介
• 使⽤用 Observer pattern • 提供便便利利的 Thread 控制 • Observer
建立的⽅方式 • Observer.create() • Observer.just() • ……
⽤用 RxJava 實現 MVVM
View ViewModel Model RxJava
None
建立⼀一個 ViewModel public class SearchViewModel { private BehaviorSubject<String> scoreValue; public
SearchViewModel() { scoreValue = BehaviorSubject.create(); } public void searchScore(final String userName) { // do something } public Observable<String> getScoreValueObservable() { return scoreValue; } }
在 View 中對 ViewModel 註冊 public class SearchScoreActivity extends AppCompatActivity
{ @Override protected void onCreate(Bundle savedInstanceState) { searchViewModel = new SearchViewModel(); } @Override protected void onResume() { searchViewModel.getScoreValueObservable(). observeOn(AndroidSchedulers.mainThread()). subscribe(new Observer<String>() { @Override public void onNext(String value) { updateScoreView(value); } }); } }
DEMO https://github.com/elvismetaphor/SearchScore-RX- MVVM
結論 • 關注點分離(Separation of Concerns ) • MVVM 讓 View
跟 ViewModel 單向/雙向綁定 • View 只負責資料的顯⽰示跟UI事件傳遞 • View 根據 ViewModel 的變化,更更新⾃自⼰己的畫⾯面 • ViewModel 不知道 View 的存在
Contact Info Elvis Lin • Github: https://github.com/elvismetaphor • Blog:
http://article.elvismetaphor.me • Slides: https://speakerdeck.com/ elvismetaphor
參參考資料 • 投影片中的範例例 https://github.com/elvismetaphor/ SearchScore-RX-MVVM • Google Architecture 範例例 https://github.com/googlesamples/android-
architecture • MVP/MVVM 範例例 https://github.com/ivacf/archi
補充資料 (1/2) • RxJava 2.0 介紹 @Kros https://www.slideshare.net/ssuser72c3b0/ rxjava-20 •
MVP in Practice @洪彥斌 https://www.slideshare.net/ssuser8674c1/ mvp-in-practice
補充資料 (2/2) • Introduction to MV(Whatever) in Android https://speakerdeck.com/elvismetaphor/ introduction-to-mv-whatever-in-android
• 使⽤用 Data binding 實作 MVVM 模式 https://speakerdeck.com/elvismetaphor/ introduction-to-mv-whatever-in-android
None