CodeLab (ViewModel과 함께 LiveData 사용하기)

day_0893·2023년 9월 5일

CodeLab

목록 보기
2/2

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 추가하기

  1. MutableLiveData한 변경 가능한 LiveData에 private val을 선언하여 외부로부터 변수를 은닉
  2. 외부에서 관찰 가능한 LiveData에 get()함수를 주어 변경 불가능한 변수를 노출
  3. 내부에서는 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)에서 작성됩니다.

0개의 댓글