第一次用 - lystyp/MVVMTest GitHub Wiki
MVVM就是用一個Model – View – ViewModel
首先要gradle那邊把data biding打開,接著layout的最外層要包一個最base的那種layout,
接著build > make project,
Android studio就會幫我生的一個binding class是根據我的layout的xml來生成的,
接著Activity本來是透過setContentView來連結layout,
現在不要,要先宣告一個binding class(這個相當於layout的代言人之類的吧~),
binding class的成員就是包含layout的button啦text啦之類的,可以直接call來用,就不需要再一大堆的findViewByID了
接著用
binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
來連接activity和layout~~~
>>> data bind UI
用觀察者來觀察資料有沒有變來更新UI
xml裡的元件的data都是從Observable物件來的,
然後Observable物件是從xml裡宣告的variable來的,
有兩種方式會使UI更新,
1.Activity一開始在onCreate的時候會去call binding 來set variable,
這時候就會通知有用到這個variable的UI要更新了,
如果沒有set variable,UI會是用那個variable的type的default值,
2.就是一般的call Observable物件的set了
>>> Context
不要儲存Activity/Fragment的內容或context在ViewModel中
如果ViewModel裡面要用到context的話,可以 MainViewModel extends AndroidViewModel
mContext = application.getApplicationContext();
來取得
https://ithelp.ithome.com.tw/articles/10193118
>>> 傳參數到ViewModel
會用到ViewModel的Factory
ViewModelProvider.Factory和NewInstanceFactory 的差別在於,ViewModelProvider.Factory 每次都會重新創建一個新的 ViewModel, NewInstanceFactory 則是同一個實例
用法不知有沒有差,我先用NewInstanceFactory 吧