Android Kotlin Fundamentals 05.2 #7 :Task: Add the Play Again button
- study
- 2019. 12. 2. 23:01
이번 태스크에서는 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 화면으로 네비게이션 될 것 입니다.
'study' 카테고리의 다른 글
Android Kotlin Fundamentals 05.2 #8 :Summary (0) | 2019.12.08 |
---|---|
파이썬 #1) VSCODE에서 에서 파이썬 개발하기 (0) | 2019.12.06 |
Android Kotlin Fundamentals 05.2 #6 :Task: Add LiveData to the ScoreViewModel (0) | 2019.12.02 |
Android Kotlin Fundamentals 05.2 #5 : Task: Add a game-finished event (0) | 2019.12.01 |
Android Kotlin Fundamentals 05.2 #4 : Task: Encapsulate the LiveData (0) | 2019.12.01 |