我有一个活动,用户正在参加一个测试。如果他们得到了一个错误的答案,我使用一个对话框告诉他们正确的答案是什么。当测试结束时,我使用另一个对话框告诉他们在结束活动之前他们的总分是多少。
不幸的是,如果他们在最后一个问题上得到了错误的答案,它会立即显示结束对话框,而不是首先显示更正对话框。当活动关闭时,我会看到弹出的更正对话框。如何才能强制它按顺序显示对话框,并等待它们被关闭/确定?
如果有必要的话,这个函数是在onCreate函数中定义的。如果有必要的话,我可以显示Dialog类,但它们只是标准的AlertDialog构建器。
fun evaluateAnswer(guess: Int) {
if (guess == correct) {
correctAnswers++
} else {
val correction = CorrectionDialogFragment(guess)
correction.show(supportFragmentManager, "correction")
}
// Do the stuff that happens regardless of whether guess was correct
// There is still more to the test
if (totalAnswers < testLength) {
updateView(matchups[totalAnswers])
}
// End the test
else {
val end = EndTestDialogFragment(percentage)
end.show(supportFragmentManager, "end")
}
}
1条答案
按热度按时间avwztpqn1#
一个函数总是从头到尾地运行,中间没有任何停顿(除非它是协程中的一个suspend函数,并且调用了其他一些确实暂停的suspend函数)。因此,由于在显示Correction对话框时您并不是从该函数返回,它甚至会在“更正”对话框出现之前运行该函数中的所有其余代码(它只能出现在主线程的下一个循环中),因此End对话框显示在它的顶部。
我将把它分解为两个函数:
然后,在您回应从片段传回的程式码中,当您回应从传回的CorrectionDialogFragment时,您会直接呼叫
continueTest()
,而非evaluateAnswer()
。这与您的要求无关,但不要忘记备份
correctAnswers
和totalAnswers
并将其恢复到保存的示例状态。