AndroidJetpack組件支持庫DataBinding與ViewModel與LiveData及Room詳解_第1頁
AndroidJetpack組件支持庫DataBinding與ViewModel與LiveData及Room詳解_第2頁
AndroidJetpack組件支持庫DataBinding與ViewModel與LiveData及Room詳解_第3頁
AndroidJetpack組件支持庫DataBinding與ViewModel與LiveData及Room詳解_第4頁
AndroidJetpack組件支持庫DataBinding與ViewModel與LiveData及Room詳解_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第AndroidJetpack組件支持庫DataBinding與ViewModel與LiveData及Room詳解目錄一、官方推薦的Jetpack架構二、添加依賴三、創(chuàng)建Repository四、創(chuàng)建ViewModel五、activity中使用AndroidJetpack之ViewModel、LiveData

AndroidJetpack之LifeCycle

一、官方推薦的Jetpack架構

ViewModel是介于View(視圖)和Model(數(shù)據(jù)模型)之間的中間層,能夠使視圖和數(shù)據(jù)分離,又能提供視圖和數(shù)據(jù)之間的通信。

LiveData是一個能夠在ViewModel中數(shù)據(jù)發(fā)生變化時通知頁面刷新UI線程的組件庫。

Room是在SQLLite上提供了一層封裝。(Android采用SQLLite作為數(shù)據(jù)庫存儲)

二、添加依賴

implementationandroidx.activity:activity-ktx:1.2.0

implementationandroidx.fragment:fragment-ktx:1.3.0

下面的案例,只是簡潔的代碼片段,大致介紹一下,讓大家了解這個架構。具體詳細代碼及深度原理,請大家自行查閱其他深度講解文章。

三、創(chuàng)建Repository

StudentRepository

classStudentRepository{

varstudentDao:StudentDao=null

constructor(context:Context){

valdatabase=MyDatabase.getInstance(context)

studentDao=database!!.getStudentDao()

//LiveData集合

fungetAllStudentsLive():LiveDataListStudent{

returnstudentDao!!.getAllStudentsLive()

fundeleteAllStudents(){

studentDao!!.deleteAllStudents()

funqueryAll():ListStudent{

returnstudentDao!!.queryAll()

funinsertStudent(varargstudent:Student){

studentDao!!.insertStudent(*student)

fundeleteStudent(varargstudent:Student){

studentDao!!.deleteStudent(*student)

funupdateStudent(varargstudent:Student){

studentDao!!.updateStudent(*student)

}

StudentDao

@Dao

interfaceStudentDao{

@Insert

funinsertStudent(varargstudents:Student)

@Delete

fundeleteStudent(varargstudents:Student)

@Update

funupdateStudent(varargstudents:Student)

@Query("SELECT*FROMstudent")

fungetAllStudent():ListStudent

@Query("SELECT*FROMstudentWHEREid=:id")

fungetStudentById(id:Int):ListStudent

}

Repository類中是關于Dao的操作,getAllStudentsLive()方法返回的是一個LiveData集合。

四、創(chuàng)建ViewModel

StudentViewModel

classStudentViewModel(application:Application):AndroidViewModel(application){

//初始化Repository對象

privatevalrepositorybylazy{StudentRepository(application)}

//定義LiveData集合

privatevarliveDataStudent:LiveDataListStudent=null

init{

liveDataStudent=repository.getAllStudentsLive()

fungetAllStudentsLive():LiveDataListStudent{

viewModelScope.launch(Dispatchers.Default){

liveDataStudent=repository.getAllStudentsLive()

returnliveDataStudent

privatefuninsertStudent(varargstudent:Student){

viewModelScope.launch(Dispatchers.Default){

repository.insertStudent(*student)

privatefundeleteStudent(varargstudent:Student){

viewModelScope.launch(Dispatchers.Default){

repository.deleteStudent(*student)

privatefunupdateStudent(varargstudent:Student){

viewModelScope.launch(Dispatchers.Default){

repository.updateStudent(*student)

privatefundeleteAllStudents(){

viewModelScope.launch(Dispatchers.Default){

repository.deleteAllStudents()

//以下為DataBinding布局調(diào)用的方法-------------------

funmInsert(){

vals1=Student("zhangsan",26)

vals2=Student("lisi",18)

insertStudent(s1,s2)

funmClear(){

deleteAllStudents()

funmDelete(){

vars1=Student(3)

deleteStudent(s1)

funmUpdate(){

vals1=Student(2,"wanger",21)

updateStudent(s1)

}

初始化數(shù)據(jù)庫Repository,創(chuàng)建一個livedata集合的屬性,并提供對其操作的方法。

五、activity中使用

mainActivity

classMainActivity:AppCompatActivity(){

privatevaradapter:StudentRecyclerViewAdapter=null

privatevarlistStudent:ArrayListStudent=ArrayList()

privatevarviewModel:StudentViewModel=null

overridefunonCreate(savedInstanceState:Bundle){

super.onCreate(savedInstanceState)

//databinding

valbinding=DataBindingUtil.

setContentViewActivityMainBinding(this,R.layout.activity_main)

//viewmodel

viewModel=ViewModelProvider(this)[StudentViewModel::class.java]

binding.studentViewModel=viewModel

binding.lifecycleOwner=this

binding.recycleView.layoutManager=LinearLayoutManager(this)

adapter=StudentRecyclerViewAdapter(listStudent)

binding.recycleView.adapter=adapter

//livedata、room

viewModel!!.getAllStudentsLive()!!.

o

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論