Android Kotlin Fundamentals 05.2 #7 :Task: Add the Play Again button

이번 태스크에서는 score screen에 PlayAgain 버튼을 추가 해 보겠습니다. 해당 click listener를 LiveData 이벤트를 이용해서 구현 할 것입니다. Play Again 버튼을 누르면 다시 game screen으로 이동하게 됩니다.

 

starter code에는 이미 Play Again 버튼이 들어가 있지만 해당 버튼은 숨겨져 있습니다.

 

1. res/layout/score_fragment.xml에서 play_agin_button의 visibility를 visible로 바꿔주세요.

 

<Button
   android:id="@+id/play_again_button"
...
   android:visibility="visible"
 />

 

2. ScoreViewModel에서 _eventPlayAgain 이라는 Boolean값을 가지는 LiveData를 추가해 주세요. 해당 객체는 score화면에서 game화면으로 네비게이션하는 LiveData이벤트를 저장하는데 사용됩니다. 

 

private val _eventPlayAgain = MutableLiveData<Boolean>()
val eventPlayAgain: LiveData<Boolean>
   get() = _eventPlayAgain

 

3. ScoreViewModel에서 _eventPlayAgain을 set하고 reset하는 함수를 정의 해 주세요.

fun onPlayAgain() {
   _eventPlayAgain.value = true
}
fun onPlayAgainComplete() {
   _eventPlayAgain.value = false
}

4. ScoreFragment에서 eventPlayAgain에 대한 observer를 추가 해주세요. 해당 코드는 onCreateView() 끝 return위에 추가 해 주세요. 람다 표현식 한에 다시 game 화면으로 돌아가는 코드와 eventPlayAgain을 리셋시키는 코드를 넣어 주세요. 

 

// Navigates back to game when button is pressed
viewModel.eventPlayAgain.observe(this, Observer { playAgain ->
   if (playAgain) {
      findNavController().navigate(ScoreFragmentDirections.actionRestart())
       viewModel.onPlayAgainComplete()
   }

 

5. ScoreFragment에서 onCreateView()안에 PlayAgain버튼에 클릭 리스너를 추가 해주세요. 그리고 viewModel.onPlayAgain()를 호출 해 주세요.

 

binding.playAgainButton.setOnClickListener {  viewModel.onPlayAgain()  }

 

6. 앱을 실행 시켜 게임을 플레이 해 보세요. 게임이 끝났을 때, score화면은 최종 점수를 화면와 PlayAgain 보여 줍니다. 그리고 PlayAgain 버튼을 누르면 다시 game 화면으로 네비게이션 될 것 입니다. 

댓글



Designed by JB FACTORY