728x90
반응형
데이터 바인딩 라이브러리는 LiveData나 ViewModel같은 AAC와 아주 매끄럽게 동작한다.
ViewModel data binding
- 데이터 바인딩을 사용해 ViewModel과 레이아웃을 연결할 수 있다.
- ViewModel 객체는 UI 데이터를 가지고 있다. ViewModel 객체를 데이터 바인딩에 전달함으로써 뷰와 ViewModel 객체 사이의 통신을 일부 자동화할 수 있다.
아래는 ViewModel과 레이아웃을 연결하는 방법이다.
- 레이아웃 파일에 ViewModel 타입의 데이터 바인딩 변수를 추가한다.
<data>
<variable
name="gameViewModel"
type="com.example.android.guesstheword.screens.game.GameViewModel" />
</data>
- Fragment 파일안에 ViewModel을 데이터 바인딩에 전달한다.
binding.gameViewModel = viewModel
Listener bindings
- 리스너 바인딩은 레이아웃에서 onClick과 같은 클릭 이벤트가 발생될 때 실행되는 바인딩 표현식이다.
- 리스너 바인딩은 람다식으로 사용된다.
- 리스너 바인딩을 사용하여 UI controller에 있는 클릭 리스너를 레이아웃 파일의 리스너 바인딩과 교체한다.
- 데이터 바인딩은 리스너를 만들고 뷰에 그 리스너를 설정한다.
android:onClick="@{() -> gameViewModel.onSkip()}"
Adding LiveData to data binding
- LiveData 객체는 자동으로 데이터가 변경되는 것을 UI에게 알리는 데이터 바인딩 소스로 사용될 수 있다.
- 뷰를 ViewModel안의 LiveData 객체에 직접 바인드할 수 있다.
LiveData가 변경되면 레이아웃의 뷰는 UI controller의 observer 메소드없이도 자동으로 업데이트될 수 있다.
android:text="@{gameViewModel.word}"
- LiveData 데이터 바인딩이 동작하려면 현재 액티비티(UI controller)를
UI controller에 있는 바인딩 변수의 lifecycle owner로 설정해야 한다.
binding.lifecycleOwner = this
String formatting with data binding
- 데이터 바인딩을 사용하여 string resource를 %s, %d와 같은 placeholder와 함께 형식을 지정할 수 있다.
- 텍스트뷰의 text 속성을 업데이트하기 위해 LiveData 객체를 형식이 지정된 문자열(formatting string)에 인수로 전달한다.
android:text="@{@string/quote_format(gameViewModel.word)}"
드디어... MVVM 패턴에서 가장 핵심이라고 생각하던 ViewModel, LiveData, DataBinding이 포함된 5번대 코스가 끝이 보인다.
지금까지 연재한 코드랩으로 알아보기 시리즈가 생각보다 말이 이상한 부분도 있을 것이라 생각한다.
(나의 부족한 영어 실력이 여기서 보인다..;)
공부한 부분을 프로젝트에서 적용해보고 이해도가 높아지면 이 시리즈에서 공부했던 내용을 보충하는 글을 쓰게 될 수도 있다.
다음 코드랩이 이번 코스의 마지막 코드랩이다. 다음 코드랩은 LiveData transformations이다.
이후에는 어떤 부분을 공부해볼까 고민 중이다.
728x90
반응형
'Android' 카테고리의 다른 글
Codelab으로 LiveData transform해보기 - 2. Add transformation for the LiveData (0) | 2023.05.20 |
---|---|
Codelab으로 LiveData transform해보기 - 1. Add a Timer (0) | 2023.05.19 |
Codelab으로 DataBinding 알아보기 - 3. Add LiveData to data binding (0) | 2023.05.14 |
Codelab으로 DataBinding 알아보기 - 2. Add ViewModel data binding (0) | 2023.05.11 |
Codelab으로 DataBinding 알아보기 - 1. 과정 소개 (0) | 2023.05.09 |