본문 바로가기
DEVELOPMENT

[실무에 바로 적용하는 안드로이드 프로그래밍] Chapter 3

by 200% 2021. 7. 17.

1. 정답 맞춘 문제를 건너뛰기

(1) Question data class(java/패키지명/Question) 수정

data class Question (@StringRes val textResID: Int, val answer: Boolean, var answered: Boolean = false)

(2) checkAnswer 수정

private fun checkAnswer(userAnswer: Boolean){
        val correctAnswer = questionBank[currentIndex].answer

        val messageResId = if (userAnswer == correctAnswer){
            R.string.correct_toast
        }else{
            R.string.incorrect_toast
        }
        if (userAnswer == correctAnswer){
            trueButton.isEnabled = false
            falseButton.isEnabled = false
            questionBank[currentIndex].answered = true
        }
        Toast.makeText(this, messageResId, Toast.LENGTH_SHORT).show()
        }

(3) isAnswered() 추가

private fun isAnswered(index: Int){
        val isQuestionAnswered = questionBank[index].answered
        trueButton.isEnabled = !isQuestionAnswered
        falseButton.isEnabled = !isQuestionAnswered
    }

(4) onCreate()의 nextButton click listener 수정

nextButton.setOnClickListener {
            currentIndex = (currentIndex + 1) % questionBank.size
            isAnswered(currentIndex) //요거 추가
            updateQuestion()
        }

 

2. 점수 보여주기

(1) 변수 추가

private var currentScore = 0.0
private var answeredCheck = mutableMapOf<Int, Boolean>()

 

(2) checkAnswer() 수정

    private fun checkAnswer(userAnswer: Boolean){
        val correctAnswer = questionBank[currentIndex].answer

        val messageResId = if (userAnswer == correctAnswer){
            R.string.correct_toast
        }else{
            R.string.incorrect_toast
        }
        if (userAnswer == correctAnswer){
            trueButton.isEnabled = false
            falseButton.isEnabled = false
            questionBank[currentIndex].answered = true
            currentScore++ // 요거 추가
        }

        answeredCheck.remove(currentIndex) // 요거 추가
        answeredCheck.put(currentIndex, true) // 요거 추가
        
        if (answeredCheck.size == questionBank.size){ // 요거 추가
            Toast.makeText(this, "${(currentScore / questionBank.size * 100).toInt()}점!", Toast.LENGTH_SHORT).show()
        }else{
        Toast.makeText(this, messageResId, Toast.LENGTH_SHORT).show()}
        }