From de9d615170d9614f3ba9e3a799c642523e2016b8 Mon Sep 17 00:00:00 2001 From: 62160052 <62160052@go.buu.ac.th> Date: Sat, 10 Sep 2022 16:43:04 +0700 Subject: [PATCH] Attach observer to score and word count --- .../unscramble/ui/game/GameFragment.kt | 14 ++++++++++---- .../unscramble/ui/game/GameViewModel.kt | 19 ++++++++++--------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/example/android/unscramble/ui/game/GameFragment.kt b/app/src/main/java/com/example/android/unscramble/ui/game/GameFragment.kt index 18d8d60..5777f0d 100644 --- a/app/src/main/java/com/example/android/unscramble/ui/game/GameFragment.kt +++ b/app/src/main/java/com/example/android/unscramble/ui/game/GameFragment.kt @@ -67,13 +67,19 @@ class GameFragment : Fragment() { binding.skip.setOnClickListener { onSkipWord() } // Update the UI - binding.score.text = getString(R.string.score, 0) - binding.wordCount.text = getString( - R.string.word_count, 0, MAX_NO_OF_WORDS) // Observe the scrambledCharArray LiveData, passing in the LifecycleOwner and the observer. viewModel.currentScrambledWord.observe(viewLifecycleOwner) { newWord -> binding.textViewUnscrambledWord.text = newWord } + viewModel.currentWordCount.observe(viewLifecycleOwner + ) { newWordCount -> + binding.wordCount.text = + getString(R.string.word_count, newWordCount, MAX_NO_OF_WORDS) + } + viewModel.score.observe(viewLifecycleOwner + ) { newScore -> + binding.score.text = getString(R.string.score, newScore) + } } /* @@ -135,7 +141,7 @@ class GameFragment : Fragment() { private fun showFinalScoreDialog() { MaterialAlertDialogBuilder(requireContext()) .setTitle(getString(R.string.congratulations)) - .setMessage(getString(R.string.you_scored, viewModel.score)) + .setMessage(getString(R.string.you_scored, viewModel.score.value)) .setCancelable(false) .setNegativeButton(getString(R.string.exit)) { _, _ -> exitGame() diff --git a/app/src/main/java/com/example/android/unscramble/ui/game/GameViewModel.kt b/app/src/main/java/com/example/android/unscramble/ui/game/GameViewModel.kt index fa70095..d1f0462 100644 --- a/app/src/main/java/com/example/android/unscramble/ui/game/GameViewModel.kt +++ b/app/src/main/java/com/example/android/unscramble/ui/game/GameViewModel.kt @@ -6,11 +6,12 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel class GameViewModel: ViewModel() { - private var _score = 0 - val score: Int + private val _score = MutableLiveData(0) + val score: LiveData<Int> get() = _score - private var _currentWordCount = 0 - val currentWordCount: Int + + private val _currentWordCount = MutableLiveData(0) + val currentWordCount: LiveData<Int> get() = _currentWordCount private val _currentScrambledWord = MutableLiveData<String>() @@ -40,20 +41,20 @@ class GameViewModel: ViewModel() { getNextWord() } else { _currentScrambledWord.value = String(tempWord) - ++_currentWordCount + _currentWordCount.value = (_currentWordCount.value)?.inc() wordsList.add(currentWord) } } fun nextWord(): Boolean { - return if (currentWordCount < MAX_NO_OF_WORDS) { + return if (currentWordCount.value!! < MAX_NO_OF_WORDS) { getNextWord() true } else false } private fun increaseScore() { - _score += SCORE_INCREASE + _score.value = (_score.value)?.plus(SCORE_INCREASE) } fun isUserWordCorrect(playerWord: String): Boolean { @@ -65,8 +66,8 @@ class GameViewModel: ViewModel() { } fun reinitializeData() { - _score = 0 - _currentWordCount = 0 + _score.value = 0 + _currentWordCount.value = 0 wordsList.clear() getNextWord() } -- GitLab