背景:
Jetpack是安卓官方為了簡化代碼,提高開發(fā)者開發(fā)效率的一系列庫洽胶。
這里只是入門晒夹,只涉及到:ViewModel,LiveData和Binding的基礎(chǔ)使用姊氓。
他們?nèi)齻€可以簡化Controller(即MainActivity)的代碼量丐怯,減少了代碼的冗余度。下面幾張圖片是其作用翔横。
一:ViewModel
作用:將View(界面)中的數(shù)據(jù)進行單獨管理读跷,是控制器變得更加簡單。
????????????還可以在軟件Destroy的情況下可以保存數(shù)據(jù)禾唁,不需要像之前那樣去手動管理數(shù)據(jù)效览。
????????????可以與LiveData配合使用无切。
1.在包中創(chuàng)建一個ViewModel類。
2.在MainActivity中
MyViewModel myViewModel;
下面是將Activity與MyViewModel建立聯(lián)系丐枉,實例化哆键。
上面兩句其實都可以用M湓骸H枋俊!但是不知道為啥有時會出錯
如果這里是繼承Avtivity類听绳,不僅這里的this會出錯颂碘,就連下面LiveData里聲明觀察者時,用到的this都會出錯椅挣!
查到的解釋:AppCompatActivity ,首先從名字上來看,是compat系列中的一員,和ViewCompat,ContextCompat一樣,是提供向下兼容功能的Activity.
3.使用
直接調(diào)用其中創(chuàng)建的數(shù)據(jù)凭涂,用來改變,或者顯示在TextView中贴妻。
具體代碼見項目:ViewModelTest2這個項目切油。真的是一路磕磕絆絆,才實現(xiàn)名惩。澎胡。。哎娩鹉。
二.LiveData的使用
負責暫存數(shù)據(jù)攻谁,數(shù)據(jù)更改的時候通知視圖。
Mutable 可變的
module??模塊; 功能塊; 程序塊; 組件; 配件;
1.在ViewModel中創(chuàng)建弯予。戚宦。。锈嫩。因為他經(jīng)常和ViewModel一起配合使用
2.使用
三受楼、DataBinding
DataBinding 是谷歌官方發(fā)布的一個框架,顧名思義即為數(shù)據(jù)綁定呼寸,是 MVVM 模式在 Android 上的一種實現(xiàn)艳汽,用于降低布局和邏輯的耦合性,使代碼邏輯更加清晰对雪。MVVM 相對于 MVP河狐,其實就是將 Presenter 層替換成了 ViewModel 層。
DataBinding 能夠省去我們一直以來的 findViewById() 步驟,大量減少 Activity 內(nèi)的代碼馋艺,數(shù)據(jù)能夠單向或雙向綁定到 layout 文件中栅干,有助于防止內(nèi)存泄漏,而且能自動進行空檢測以避免空指針異常捐祠。
要實現(xiàn) MVVM 的 ViewModel 就需要把數(shù)據(jù)(Model)與 UI(View)進行綁定非驮,data?標簽的作用就像一個橋梁搭建了 View 和 Model 之間的通道
1.準備工作
寫好后雏赦,sync,即同步以下gradle
2.? 轉(zhuǎn)換為databinding布局
轉(zhuǎn)換之后的樣子:
4.系統(tǒng)自動生成了ActivityMainBinding類芙扎,由acticity_main轉(zhuǎn)換為databinding后生成星岗。
5.使activity_main與MainActivity重新關(guān)聯(lián)
這樣之后呢,binding就可以直接調(diào)用布局文件中的TextView和Button了戒洼,比如:binding.button
以上是將布局中的控件綁定到頁面俏橘。
現(xiàn)在將頁面中的反綁到布局。
目前是這樣的:
開始反綁:
將TextView的setText這里圈浇,改寫為上圖:
data在這里即代表MyViewModel寥掐,可以調(diào)用其中的數(shù)據(jù)number,轉(zhuǎn)換為字符串后磷蜀,顯示再TextView中去召耘。
同理,再Button這里:
添加語句:
這樣褐隆,一旦這個button被點擊污它,就會自動調(diào)用 這里的onClick,從而調(diào)用add()庶弃。
在頁面中就不需要再去setClickLisner了衫贬。