CodeLab (ViewModel과 함께 LiveData 사용하기)
3.Livedata란
- LiveData는 데이터를 보유합니다. DLiveData는 모든 유형의 데이터에 사용할 수 있는 Wraper입니다.
- LiveData는 관찰 가능합니다. LiveData가 변경될시 관찰하는 곳에 변경사항이 알려집니다.
- LiveData는 수명주기를 인식합니다. LiveData에 관찰자를 연결하면 관찰자는 LifecyclerOwner와 연결됩니다. LifecyclerOwner(일반적으로 Activity 또는 Fragment), LiveData는 STARTED 또는 RESUMED 같은 활성 수명주기 상태인 관찰자만 업데이트 합니다. STARTED, RESUMED=> Lifecycler.State 변수로 Activity 와 Fragment에서 onstart 또는 Resume 같은 생명주기 함수가 호출될 때 지정된다.
4. 글자가 뒤섞인 현재 단어에 LiveData 추가하기
- MutableLiveData한 변경 가능한 LiveData에 private val을 선언하여 외부로부터 변수를 은닉
- 외부에서 관찰 가능한 LiveData에 get()함수를 주어 변경 불가능한 변수를 노출
- 내부에서는 MutableLiveData의 값을 변경할 수 있도록 함
private val _currentScrambledWord = MutableLiveData<String>()
val currentScrambledWord: LiveData<String>
get() = _currentScrambledWord
private fun getNextWord() {
...
} else {
_currentScrambledWord.value = String(tempWord)
...
}
}
5. LiveData 객체에 관찰자 연결하기
viewModel의 변수에 Fragment 생명주기를 포함한 관잘차를 추가함으로서
Fragment가 STARTED 또는 RESUME 상태일 때만 관찰자로부터 알림을 받게 된다.
// Observe the scrambledCharArray LiveData, passing in the LifecycleOwner and the observer.
viewModel.currentScrambledWord.observe(viewLifecycleOwner,
{ newWord ->
})
// Specify the fragment view as the lifecycle owner of the binding.
// This is used so that the binding can observe LiveData updates
binding.lifecycleOwner = viewLifecycleOwner
6. 점수 및 단어 수에 관찰자 연결하기
7. 데이터 결합과 함께 LiveData 사용하기
8. 데이터 결합 변수 추가하기
9. 결합 표현식 사용하기
코드 복습
android:text에는 String 을 넣을 수 있다.
android:text="@{user.firstName}/>
android:text="@{gameViewModel.currentScrambledWord}"/>
Resource를 불러올 수 있다.
android:padding="@{@dimen/largePadding}"
android:text="@{@string/example_resource(user.lastName)}"
< string name="example_resource">Last Name%s</string
10. TalkBack을 사용 설정한 상태에서 Unscramble 앱 테스트하기 (스킵)
11. 사용하지 않는 코드 삭제하기
12. 솔루션 코드
13. 요약
- LiveData는 데이터를 보유합니다. LiveData는 모든 데이터에 사용할 수 있는 래퍼입니다.
- LiveData는 관찰 가능합니다. 즉, LiveData 객체에서 보유한 데이터가 변경되면 관찰자에 알림이 제공됩니다.
- LiveData는 수명 주기를 인식합니다. LiveData에 관찰자를 연결하면 관찰자는 LifecycleOwner(일반적으로 활동 또는 프래그먼트)와 연결됩니다. LiveData는 STARTED 또는 RESUMED 같은 활성 수명 주기 상태인 관찰자만 업데이트합니다. LiveData 및 관찰에 관한 자세한 내용은 여기에서 알아볼 수 있습니다. (링크 공부 보류)
- 앱은 데이터 결합 및 결합 표현식을 사용하여 레이아웃에서 LiveData 변경사항을 수신할 수 있습니다.
- 결합 표현식은 레이아웃 내에서 레이아웃 속성을 참조하는 속성(attribute properties)(예: android:text)에서 작성됩니다.