https://www.youtube.com/watch?v=wP6aRtOLS0k&list=PLxTmPHxRH3VXHOBnaGQcbSGslbAjr8obc&index=9
*DataBinding - xml에 data를 넘겨줄 수 있음
1. 모듈 build gradle의 android 항목에 dataBinding {enabled = true} 추가
2. xml코드 전체를 <layout></layout>추가하고 네임스페이스를 layout에 옮겨줌
3. 기존의 setContentView를 DatabindingUtil.setContentView()로 수정하고 binding변수를 만들어 할당해줌.
4. binding개체는 xml정보를 모두 갖고 있으므로 findViewbyId가 필요하지 않다. binding.Id값으로 바로 접근한다.
5. binding은 xml문서에 data를 꽂을 수 있다.
- <data> <variable> 뷰모델(등의 데이터) </variable> </data>를 통해 데이터 바인딩.
6. 해당 뷰모델은 LiveData를 갖고 있으므로 액티비티에서 binding.setLifecycleOwner(this);로 라이프사이클오너를 지정해줘야한다.
7. 액티비티에서 binding.setViewModel(viewModel)로 뷰모델을 지정해준다.
8. xml에서 뷰모델의 라이브데이터를 바로 사용하기 위해서
뷰모델에 라이브데이터를 멤버변수로 선언-> DB에서 받아온 데이터를 생성자에서 라이브데이터 변수에 할당해준다
9. xml의 textview의 text속성 값에 @{viewModel.todos.toStriong}를 넣어준다.
10. 액티비티의 관찰코드 observe 함수를 삭제한다.
11. 온클릭 함수의 경우 @{()-> viewModel.insert(~~))} 이런식으로 만들어준다.
*코틀린의 경우는?
1. bindng.lifecycleOwner = this 해주기
-> 이유: LiveData를 활용하기 위함. 이게 없으면 라이브데이터 관찰할 때 마다 xml refresh가 안됨.
2. 뷰모델안에서 코루틴을 사용하도록 변경해야함.
뷰모델의 함수에서 viewModelScope.launch(Dispatcher.Op) 하고 db접근 코드를 쓴다.
3. 그리고 Dao Interface의 모든 함수를 suspend로 바꿔 비동기처리를 하도록 해준다.
'Android' 카테고리의 다른 글
| [Android] Navigation (0) | 2020.09.13 |
|---|---|
| [Android] UI와 로직 분리 ViewModel (0) | 2020.09.11 |
| [Android] Room 비동기 처리 (0) | 2020.09.11 |
| [Android] Room - LiveData 연동 (0) | 2020.09.11 |
| [Android] DB를 이용한 데이터 저장 방법 room (0) | 2020.09.11 |