Codelab으로 LiveData 알아보기 - 7. Add the Play Again Button

2023. 5. 1. 01:00·Dev experience/Android
728x90
반응형

이번에는 점수 화면에 Play Again 버튼을 추가하고 LiveData를 사용하여 클릭 리스너를 구현할 것이다.

해당 버튼은 점수 화면에서 다시 게임 화면으로 이동하는 이벤트를 발생시킨다.

 

먼저, 우리가 받아놓은 코드에는 이미 Play Again 버튼이 있지만 숨겨져 있다.

 

1. score_fragment.xml에서 play_again_button의 visibility를 보이도록 처리한다.

 

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

 

2. ScoreViewModel에 _eventPlayAgain이라는 Boolean값을 가지는 LiveData객체를 추가한다.

이 객체는 점수 화면에서 게임 화면으로 이동하는 이벤트를 저장하기 위해 만들었다.

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

 

3. ScoreViewModel에서 _eventPlayAgain을 설정하고 초기화하는 메소드를 정의한다.

 

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

 

4. ScoreFragment에서 eventPlayAgain에 옵저버를 추가한다. onCreateView 마지막, return문 이전에 코드를 추가한다.

람다식에서 다시 게임 화면으로 넘어가고 eventPlayAgain을 리셋한다.

 

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

 

5. ScoreFragment의 onCreateView안에서 Play Again 버튼에 클릭 리스너를 추가하고

viewModel.onPlayAgain 메소드 호출을 추가한다.

 

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

 

6. 앱을 실행하고 게임을 다시 플레이한다. 게임이 끝나면 점수 화면은 최종 점수와 Play Again 버튼을 보여준다.

해당 버튼을 누르면 다시 게임 화면으로 이동하기 때문에 다시 게임을 플레이할 수 있다.

앱 화면 출처 : Google Codelab

 

 

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

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

카카오톡 공유 앱 이름 바꾸기  (0) 2023.05.06
Codelab으로 LiveData 알아보기 - 8. 정리(完)  (0) 2023.05.03
Codelab으로 LiveData 알아보기 - 6. Add LiveData to the ScoreViewModel  (0) 2023.04.28
Codelab으로 LiveData 알아보기 - 5. Add a game-finished event(2)  (0) 2023.04.27
Codelab으로 LiveData 알아보기 - 4. Add a game-finished event(1)  (0) 2023.04.25
'Dev experience/Android' 카테고리의 다른 글
  • 카카오톡 공유 앱 이름 바꾸기
  • Codelab으로 LiveData 알아보기 - 8. 정리(完)
  • Codelab으로 LiveData 알아보기 - 6. Add LiveData to the ScoreViewModel
  • Codelab으로 LiveData 알아보기 - 5. Add a game-finished event(2)
BonusTrack02.dev
BonusTrack02.dev
공부, 일상
  • BonusTrack02.dev
    BonusTrack02.dev
    BonusTrack02.dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (237)
      • Dev experience (85)
        • Android (84)
        • Kotlin (1)
      • Study (62)
        • Kotlin (26)
        • Swift (17)
        • Java (19)
      • 프로그래머스 (68)
      • 주저리주저리 (22)
        • 카페 (5)
        • 음식점 (4)
        • 컨퍼런스 (1)
        • 팝업스토어 (4)
        • 전시회 (1)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
BonusTrack02.dev
Codelab으로 LiveData 알아보기 - 7. Add the Play Again Button
상단으로

티스토리툴바