본문 바로가기

Android

[Android] DataBinding

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