android 代码部分显示一个对话框,然后显示另一个对话框,但第二个对话框立即在第一个对话框上打开

gz5pxeao  于 2022-12-09  发布在  Android
关注(0)|答案(1)|浏览(296)

我有一个活动,用户正在参加一个测试。如果他们得到了一个错误的答案,我使用一个对话框告诉他们正确的答案是什么。当测试结束时,我使用另一个对话框告诉他们在结束活动之前他们的总分是多少。
不幸的是,如果他们在最后一个问题上得到了错误的答案,它会立即显示结束对话框,而不是首先显示更正对话框。当活动关闭时,我会看到弹出的更正对话框。如何才能强制它按顺序显示对话框,并等待它们被关闭/确定?
如果有必要的话,这个函数是在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")
            }
        }
avwztpqn

avwztpqn1#

一个函数总是从头到尾地运行,中间没有任何停顿(除非它是协程中的一个suspend函数,并且调用了其他一些确实暂停的suspend函数)。因此,由于在显示Correction对话框时您并不是从该函数返回,它甚至会在“更正”对话框出现之前运行该函数中的所有其余代码(它只能出现在主线程的下一个循环中),因此End对话框显示在它的顶部。
我将把它分解为两个函数:

fun evaluateAnswer(guess: Int) {
    if (guess == correct) {
        correctAnswers++
        continueTest() // ADD THIS HERE
    } else {
        val correction = CorrectionDialogFragment(guess)
        correction.show(supportFragmentManager, "correction")
    }
}

fun continueTest() {
    // 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")
    }
}

然后,在您回应从片段传回的程式码中,当您回应从传回的CorrectionDialogFragment时,您会直接呼叫continueTest(),而非evaluateAnswer()
这与您的要求无关,但不要忘记备份correctAnswerstotalAnswers并将其恢复到保存的示例状态。

相关问题