Toast没有显示

问题描述 投票:0回答:1

试图显示两个带有一些信息的吐司,但是其中一个没有出现。

下面的代码中的关注点是showScore()和checkAnswer()函数。第一个没有显示其吐司,第二个没有。该项目成功构建,并且该应用程序正在我的手机(Android 9,aarch64)上运行。

我刚刚开始学习Android。也许这很愚蠢,但是我不知道为什么它不起作用。

class MainActivity : AppCompatActivity() {

    private lateinit var trueButton: Button
    private lateinit var falseButton: Button
    private lateinit var nextButton: ImageButton
    private lateinit var prevButton: ImageButton
    private lateinit var questionTextView: TextView

    private val questionBank = listOf(
        Question(R.string.question_australia, true),
        Question(R.string.question_oceans, true),
        Question(R.string.question_mideast, false),
        Question(R.string.question_africa, false),
        Question(R.string.question_americas, true),
        Question(R.string.question_asia, true)
    )

    private val answers = mutableMapOf<Question, Boolean>()

    private var currentIndex = 0

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        trueButton = findViewById(R.id.true_button)
        falseButton = findViewById(R.id.false_button)
        nextButton = findViewById(R.id.next_button)
        prevButton = findViewById(R.id.prev_button)
        questionTextView = findViewById(R.id.question_text_view)

        trueButton.setOnClickListener { view: View ->
            checkAnswer(true)
        }

        falseButton.setOnClickListener { view: View ->
            checkAnswer(false)
        }

        nextButton.setOnClickListener {
            currentIndex = (currentIndex + 1) % questionBank.size
            updateQuestion()
            checkIfAnswered()
        }

        prevButton.setOnClickListener {
            currentIndex = if (currentIndex > 0) (currentIndex - 1) else (questionBank.size - 1)
            updateQuestion()
            checkIfAnswered()
        }

        questionTextView.setOnClickListener {
            currentIndex = (currentIndex + 1) % questionBank.size
            updateQuestion()
            checkIfAnswered()
        }

        updateQuestion()
    }

    private fun updateQuestion() {
        val questionTextResId = questionBank[currentIndex].textResId
        questionTextView.setText(questionTextResId)
    }

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

        if (!answers.containsKey(question)) {
            answers[question] = userAnswer
            falseButton.isEnabled = false
            trueButton.isEnabled = false

            if (answers.size == questionBank.size) {
                showScore()
            }
        } else {
            return
        }

        val messageResId = if (userAnswer == correctAnswer) {
            R.string.correct_toast
        } else {
            R.string.incorrect_toast
        }

        Toast.makeText(this, messageResId, Toast.LENGTH_SHORT).show()
    }

    private fun checkIfAnswered() {
        if (answers.containsKey(questionBank[currentIndex])) {
            falseButton.isEnabled = false
            trueButton.isEnabled = false
        } else {
            falseButton.isEnabled = true
            trueButton.isEnabled = true
        }
    }

    private fun showScore() {
        var score = 0
        answers.forEach {
            if (it.key.answer == it.value) {
                score += 1
            }
        }
        val toastText = "You answered $score of ${questionBank.size}"
        Toast.makeText(this, toastText, Toast.LENGTH_SHORT).show()
    }
}

UDP:尝试在我朋友的手机(Android 9,aarch64)上运行,并且遇到相同的问题。

android kotlin android-toast
1个回答
0
投票

[通过一次与Android相关的聊天,我发现了问题。问题在于,一个Toast出现在另一个Toast的顶部。通常,以这种方式使用Toasts是一个坏主意。如果您有类似的问题,请考虑使用Snackbar。

© www.soinside.com 2019 - 2024. All rights reserved.