본문 바로가기

Android

[Android] Architecture Component - ViewModel + LiveData + DataBinding

https://www.youtube.com/watch?v=Y-uPcwBEEV4&t=2s

출처: 오준석의 생존코딩

 

*아키텍쳐 컴포넌트? -> 라이프사이클 관리를 쉽게 하는 것

*라이브데이터 사용 시 -> 데이터 변경시 알림을 받아 ui를 자동으로 변경 가능(데이터 바인딩-옵저버블 필드보다 쉬움 )

*뷰모델 -> ui와 관계가 있는 데이터를 저장하는 용도.

* -> sqlite를 대체하는 라이브러리 

 

*기존 databinding 만 사용한다면? -> 라이프사이클 때문에 화면 회전시 값이 날아감.

*뷰모델의 라이프사이클 -> 액티비티 소멸시 소멸, 화면 회전해도 값이 날라가지 않음

 

*라이브데이터와 뷰모델을 엮어서 쓰면?-> 관찰 가능한데이터로 만들 수 있다.

 - 수정이 가능하다면 MutableLiveData,데이터를 set할 필요가 없다면 LiveData

 - 라이브데이터 생성시 초기화안하면 null값.

 - 라이브 데이터를 observe함수로 관찰-> 라이브데이터에 변경 사항이 생기면 UI Update를  수행할 수 있음

 

*그런데 데이터바인딩과 뷰모델을 엮어서 쓰면 -> 더욱 더 간단해짐

 - xml 파일에 라이브데이터(뷰모델.라이브데이터)를 바로 꽂아주면 observe함수 없앨 수 있음

 - binding.setLifecycleOwner(this) 호출로 액티비티의 라이프 사이클을 참조해서 데이터 변경시에 알아서 리프레쉬 해줌.

 - binding.setViewModel(viewModel)로 뷰모델을 바인딩에 바로 꽂아줌.

 - UI변경하는 코드 없으나 setLifecycleOwner을 호출했기때문에 라이브데이터가 바뀌면 다시 그려짐.

 - xml에 onclick속성에 람다식 ()->viewModel.increase() 써주면 액티비티에 온클릭리스너 삭제가능.

 - 액티비티에는 UI를 연결해주는 코드만 남게 됨.

 

* 액티비티안에 프래그 먼트2개가 서로 데이터를 공유하는 방법

 -> 뷰모델 사용으로 공유 데이터를 만들 수 있음.

 -> 두 프래그먼트가 액티비티의 뷰모델을 공유하면 됨.

 

 

 

*etc

-FloatingActionButton 축약어 -> fab