android - 吐司没有出现
问题描述
试图显示两个带有一些信息的 Toast,但其中一个没有出现。
下面代码中的兴趣点是函数 showScore() 和 checkAnswer()。第一个不显示它的 Toast,第二个显示。该项目成功构建,该应用程序正在我的手机(Android 9,aarch64)上运行。
我刚开始学习安卓。也许这是愚蠢的简单,但我不明白为什么它不起作用。
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 相关的聊天,我发现了问题所在。问题是一个 Toast 出现在另一个 Toast 之上。一般来说,以这种方式使用 Toasts 是个坏主意。如果您有类似的问题,请考虑使用 Snackbar。
推荐阅读
- raspberry-pi - 设置 Raspberry pivpn 后出现 403 禁止错误
- c# - 从回调方法访问时,HttpContextAccessor cookie 为空
- sql - 子查询行上的 Sql Group by
- copying - 我将如何防止复制我的 itch.io 发布的游戏?
- package - 使用 lightsail 站点包的 Django 部署未更新
- android - 未调用 HmsMessageService onMessageReceived
- wso2 - WSo2:Rabbitmq 是否可以在没有代理的情况下从序列中重新排队
- jquery - getJSON 调用 Struts 动作类中的方法进行自动完成
- kotlin - Kotlin DSL 自动添加/生成到 MutableList
- c# - Ef Core HasConversion 无法使用 CosmosDb 提供程序