Android Kotlin Fundamentals 05.2 #3 : Task : Attach observers to the LiveData objects 번역

이번 태스크는 이전 태스크와 매우 밀접하게 연관되어 있습니다. 이전 태스크에서 우리는 score과 word를 LiveData로 감싸는 작업을 하였습니다. 이번 태스크에서는 이런 LiveData에 Observer를 붙히는 작업을 해 볼 것 입니다.

 

1. GameFragment의 onCreateView()안에서 viewModel.score에 대한 LiveData에 Observer를 붙혀 봅시다. viewModel을 초기화 하는 코드 다음에 observe()를 사용해서 LiveData에 observer를 붙혀야 합니다. 람다 표현식을 사용하여 코드를 간단히 구현해 보세요.

 

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

 

Observer를 사용하려면 androidx.lifecycle.Observer를 import해야 합니다.

 

2. 위에서 생성한 observer는 라이브데이터의 변경이 이뤄졌을 때, 이벤트를 받습니다. viewModel.score의 observer안에 TextView의 score를 업데이트 하는 코드를 넣어 주세요.

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

 

Observer는 이렇게 구현되어 있으며, 위의 코드는 onChanged()가 호출 되었을 때, textview를 업데이트 하도록 구현 한 것 입니다.

public interface Observer<T> {
    /**
     * Called when the data is changed.
     * @param t  The new data
     */
    void onChanged(T t);
}

 

3. 이제 word LiveData에도 Observer를 붙혀 봅시다. score에 Observer를 붙힌 것과 동일한 방식으로 구현하면 됩니다.

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

 

이제 score와 word 데이터가 변경 되었을 때, 화면에 나타나는 score, word 또한 자동으로 변경이 됩니다.

 

4. GameFragment에서 updateWordText()와 updateScoreText()를 제거해 줍니다. LiveData가 변경되었을 때 자동으로 뷰가 업데이트 되므로 이 두개의 함수는 이제 더이상 필요 없습니다.

 

원래는 onSkip()/onCorrect() 호출 시 ViewModel이 가지고 있는 데이터에 변경이 발생하여 이 뒤에 View에 업데이트를 적용하는 함수인 updateWordText()와 updateScoreText()를 호출 해 준 것이지만, 이제 LiveData의 변경을 감지하여 Observer의 onChanged()에서 뷰의 변경을 처리 해 주기 때문에 위의 두개의 함수를 이제 제거 해 줍니다.

 

5. 앱을 한번 실행 해 보세요. 앱은 이전과 똑같이 동작 하지만, 해당 앱은 LiveData와 Observer를 사용하여 구현된 앱 입니다.

댓글



Designed by JB FACTORY