接上篇,data binding 的接入,在某種意義上判导,使 xml 布局文件從 V 層(Activity)獨立出來。V 層不再與 xml 交互 (findViewById,? xxx.setText(), xxx.setEnable) 沛硅。而只需關注與 xml 綁定的 vm 里的數(shù)據眼刃。下圖是接入 data binding 后 MVP 的時序圖。
data binding 支持在 xml 布局文件里綁定各種事件稽鞭。比如某點擊事件綁定 Presenter 的方法鸟整。如此一來,VM 要持有 Presenter對象朦蕴。而且篮条,實際項目里,點擊事件并不是簡單的觸發(fā)一個方法吩抓。還包括了千奇百怪的業(yè)務需求涉茧。為了保持 VM 的整潔性。事件的綁定還是在 V 層疹娶,而不是通過 xml 布局文件伴栓。
上圖可看出:
1,vm 僅包含與 xml 布局文件互相綁定的 LiveData 或 BaseObervable雨饺,V 層通過更新 vm的數(shù)據來更新界面钳垮。
2,Activity, ViewHolder(個人理解), View 都歸 V層额港。xml雖然也是饺窿,但如上文說的,已相當獨立移斩。
3肚医,控件的各種事件通過 V 層持有的 binding 對象綁定相關事件绢馍。如上篇文章說的。
4肠套,雙向綁定的實現(xiàn)是通過? 根據xml布局文件自動生成的 binding類舰涌,將ViewModel 賦值到 xml 定義的data屬性里。避免重復代碼你稚。這里根據上圖定義 V 層不同類型的基類? Activity -----> BaseVmActivity瓷耙,View?-----> BaseBindingView。 ViewHolder 比較特殊入宦。綁定操作是在Adapter哺徊,后續(xù)單獨出來聊聊室琢。
BaseVmActivity乾闰,?BaseBindingView 思路是一樣的,都是通過反射實現(xiàn)盈滴。在 《MVVM》 里已經介紹過涯肩。這里就簡單的貼下代碼。
BaseVmActivity:
BaseBindingView :