Codelab으로 LiveData 알아보기 - 2. Attach observers to the LiveData objects

2023. 1. 18. 01:30·Dev experience/Android
728x90
반응형

저번 단계에서는 score와 word의 데이터를 LiveData 객체로 바꿔줬다.

 

이번 단계에서는 Observer 객체를 작업한 LiveData 객체에 붙일 것이다.

우리는 fragment의 뷰(viewLifecycleOwner)를 LifecycleOwner로써 사용할 것이다.

 

왜 viewLifecycleOwner를 사용할까?

 

프래그먼트의 뷰는 프래그먼트 자체가 부서지지 않더라도 사용자가 다른 곳으로 이동하면 부서진다.

 

이것은 필연적으로 프래그먼트의 lifecycle과 프래그먼트 뷰의 lifecycle 두 lifecycle을 만든다.

 

프래그먼트의 뷰 대신 프래그먼트의 lifecycle을 참조하면 뷰를 업데이트할 때 사소한 버그가 생길 수 있다.

 

그래서, 프래그먼트의 뷰에 영향을 미치는 observer를 설정할 때

onCreateView() 메소드 안에서 observer를 설정해야 하고 viewLifecycleOwner를 observer에게 넘겨주어야 한다.

 

 

1. GameFragment의 onCreateView() 메소드 안에서 Observer객체를 현재 점수를 나타내는 LiveData 객체에 붙인다.

 

observe() 메소드를 사용하고, viewModel 초기화 이후 코드를 넣어준다.

viewModel.score.observe(viewLifecycleOwner, Observer { newScore ->
})

 

Observer에 대한 참조를 해결하기 위해서는 androidx.lifecycle.Observer를 import 해주어야 한다.

 

 

2. 만든 observer는 LiveData 객체가 갖고 있는 데이터의 변경이 있을 때 이벤트를 받는다.

 

observer 안에 score의 text를 새로운 점수로 업데이트한다.

/** Setting up LiveData observation relationship **/
viewModel.score.observe(viewLifecycleOwner, Observer { newScore ->
   binding.scoreText.text = newScore.toString()
})

 

 

3. Observer객체를 현재 word LiveData 객체에 붙인다.

위와 동일한 작업이다.

/** Setting up LiveData observation relationship **/
viewModel.word.observe(viewLifecycleOwner, Observer { newWord ->
   binding.wordText.text = newWord
})

 

이제 score와 word의 값이 바뀌면 보여지는 score나 word는 자동으로 업데이트한다.

 

 

4. GameFragment에서 updateWordText()와 updateScoreText() 메소드, 모든 참조까지 지운다.

 

우리는 이제 LiveData observer 메소드가 자동으로 textview를 업데이트하기 때문에 필요가 없다.

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Dev experience > Android' 카테고리의 다른 글

기존 프로젝트의 Java to Kotlin 전환 시 주의점  (0) 2023.02.26
Codelab으로 LiveData 알아보기 - 3. Encapsulate the LiveData  (0) 2023.01.26
Codelab으로 LiveData 알아보기 - 1. Add LiveData to the GameViewModel  (0) 2023.01.17
Codelab으로 LiveData 알아보기 - 과정 소개  (2) 2023.01.15
Codelab으로 ViewModel 알아보기 - 4. Use a ViewModelFactory(完)  (0) 2023.01.13
'Dev experience/Android' 카테고리의 다른 글
  • 기존 프로젝트의 Java to Kotlin 전환 시 주의점
  • Codelab으로 LiveData 알아보기 - 3. Encapsulate the LiveData
  • Codelab으로 LiveData 알아보기 - 1. Add LiveData to the GameViewModel
  • Codelab으로 LiveData 알아보기 - 과정 소개
BonusTrack02.dev
BonusTrack02.dev
공부, 일상
  • BonusTrack02.dev
    BonusTrack02.dev
    BonusTrack02.dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (237) N
      • Dev experience (85)
        • Android (84)
        • Kotlin (1)
      • Study (62) N
        • Kotlin (26) N
        • Swift (17)
        • Java (19)
      • 프로그래머스 (68)
      • 주저리주저리 (22)
        • 카페 (5)
        • 음식점 (4)
        • 컨퍼런스 (1)
        • 팝업스토어 (4)
        • 전시회 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Kotlin
    오블완
    getNumericValue
    ViewModel
    coroutines
    자바
    Observer
    viewModelScope
    programmers
    스위프트
    jetpack
    LiveData
    daterangepicker
    ios
    안드로이드
    aac
    PCCE
    프로그래머스
    코틀린
    room
    MVVM
    배열
    Java
    Material
    티스토리챌린지
    CodeLab
    SWIFT
    android
    databinding
    코루틴
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
BonusTrack02.dev
Codelab으로 LiveData 알아보기 - 2. Attach observers to the LiveData objects
상단으로

티스토리툴바