上個星期感覺好充實,星期三去參加了Google Developer Day,
第一次見到谷歌的官方人員,第一次見到大牛徐宜生,
這么多人都聽谷歌在吹水,展示了Google VR,
上午聽了一場介紹了Android N的一些新特性,
那個老師還挺搞幽默的,下午去聽了一場Material Design的講座,
沒想到是個美女,做技術(shù)的有這么好看,真是沒想到,
然后聽了一場Tensorflow,那叫一個爆滿,因為過于火熱
,后來加了兩場這個,不過我好像沒怎么聽懂(不用鄙視我 v)。
后來去聽了防止安卓的ANR,以及省電那啥,說了好多解決方案,
以后找PPT,慢慢翻吧。再說星期天,
去參加了GDG組織的一個Android框架的一個沙龍,
見到了大牛翟一帆,魔都三帥之首我服。
好了,扯淡再多就越離題千里,
記得星期天的沙龍上,有個同學問ViewModule可不可以含有Context,MarkZhai當時說可以啊,用的舒服就好,
其實我最初寫MVVM的時候,VM中確實不含有一個android.*下的包,
當然也不包括Context了,但是你在用的時候會感覺各種不便,
因為安卓的上面的很多資源都是需要Context的,
各種拿不到String,各種啟動不了另外一個Activity,
我前期的做法,是通過一個接口,去View中去實現(xiàn)啟動Activity,
通過一個接口去獲取字符串,是的,可以實現(xiàn),但是后期維護起來,
你就會發(fā)現(xiàn),一個VM就是一個VM,說好的VM可以復用的呢,
假使存在復用,V中需要實現(xiàn)VM中需要的接口,
多個V中充斥著相同的代碼,用MarkZhai說的就是一坨,
代碼是寫給機器看的那是程序員,代碼寫給程序員看的那叫工程師,
所以后來VM中包含了一個Context,會覺得怎么用怎么爽,
譬如一個列表界面到詳情界面,這個列表中的數(shù)據(jù)在多個界面是相同的,樣式是類似的,跳轉(zhuǎn)到相同的詳情,完全可以整理出來一個VM,
VM中加上Context,VM中配置好,直接啟動到詳情,怎么用怎么爽,
后期維護起來也只要看一個地方,還有就是VM我前期喜歡用Observablefield 去做和View的綁定,其實越用到后來,
越是覺得用繼承BaseObservable,然后加上注解,
每當更新的時候notify一下,因為更多時候,
Observablefield中的數(shù)據(jù)我們是不能直接拿來使用的,譬如一個json
{
"user":{
"name":"android",
"age":20,
"tag":{
"hobby":["soccer","running"],
"color":["red","blue"]}},
"cartInfo":[{"sku":"123","quantity",10},{"sku":"124","quantity",12}]
}
json我意想的,應(yīng)該沒有錯誤,這個還叫簡單的,
我們公司的json比這個還復雜,如果這個時候要取Color的個數(shù),
我們存的時候肯定存了Json所對應(yīng)的Model假如叫data,
那么這個時候就是各種 . 了,data.user.tag.color.size(),
哈哈?。?!這樣的代碼如果出現(xiàn)在XML里面,不僅沒有簡化邏輯,
反而增加了閱讀XML時候的困難,喜歡Databinding就是喜歡那種在XML里面能夠一目了然這個View到底是干啥,
如果XML中充斥著這樣的代碼,我想誰也不愿意看到,
所以回到上面VM繼承BaseObservable,你會有意向不到的收獲,
寫一個函數(shù)getColorSize(),然后神奇的就可以在XML中就可以使用colorSize這個屬性了,更新的時候記得notify就行,
我現(xiàn)在是兩種方案并行,以第二種方案為主,因為可以自己控制
,感覺要舒服的多。
泡個腳早點睡覺,最近感冒,香菇藍瘦?。?/p>