AlertDialog仅在Android上出现较晚(行为怪异)

AlertDialog仅在Android上出现较晚(行为怪异),android,android-alertdialog,Android,Android Alertdialog,我正在将数据上载到Web服务器。在我的片段上,我有一个开始上传的按钮。我试图通过一个不可取消的AlertDialog解决方案完成用户通知,这有两个阶段 当我按下上传按钮时,上传准备工作开始了。我正在设置AlertDialog并演示它。一旦物理上传开始,我将使用相同的AlertDialog,但更改其中的消息以显示上传的进度 *****现在的问题是****** 当我设置AlertDialog并调用Show方法时,它不会显示AlertDialog。但是一旦上传开始,更新进度,我就调用setMessag

我正在将数据上载到Web服务器。在我的片段上,我有一个开始上传的按钮。我试图通过一个不可取消的AlertDialog解决方案完成用户通知,这有两个阶段

当我按下上传按钮时,上传准备工作开始了。我正在设置AlertDialog并演示它。一旦物理上传开始,我将使用相同的AlertDialog,但更改其中的消息以显示上传的进度

*****现在的问题是****** 当我设置AlertDialog并调用Show方法时,它不会显示AlertDialog。但是一旦上传开始,更新进度,我就调用setMessage方法,此时会出现AlertDialog

相关代码如下所示:

submitbutton.setOnClickLictener位于onViewCreated()中

我在这里尝试过在UIThread上运行SubmitAd(),如果有帮助的话,但是没有它也是一样的

SubmitAd正在显示对话框。(实际上,此时未显示任何内容

fun SubmitAd() {
    var addInApp: Boolean = false
    ToBePurchased = 0

    if (CheckCanUpload()) {
        var AlertView = AlertDialog.Builder(requireActivity())
        AlertView.setTitle("Hirdetés feltöltés")
        AlertView.setMessage("A feltöltés előkészítése hosszabb ideig is eltarhat, kérjük várjon!")
        AlertView.setCancelable(false)

        DialogToShow = AlertView.create()
        DialogToShow!!.show()

        purchaseLoop = 0

        UploadWithPurchase()
    } else {
        var AlertView = AlertDialog.Builder(requireActivity())
        AlertView.setTitle("Hirdetés hiba")
        AlertView.setMessage("A hirdetése hiányos. Kérjük töltse ki az összes mezőt és csatoljon fotót a hirdetéséhez!")
        AlertView.setPositiveButton("Ok") { dialog, which ->
            dialog.dismiss()
        }
        DialogToShow = AlertView.create()
        DialogToShow!!.show()
    }
}
在UploadWithPurchase()中,Playstore购买处理完成,但如果根本没有购买,它只是通过一个循环,递归调用UploadWithPurchase(),直到所有可能的购买都被选中,然后它进入真正的Upload()它调用Http请求以上载数据,并通过接口报告上载过程的进度

Webhelper返回的进度如下所示:

override fun WebHelperProgress(id: String, progress: Float) {
    if (DialogToShow != null) {
        DialogToShow!!.setMessage("Feltöltés folyamatban. Kérem várjon! ... ${progress.toInt()}%")
    }
}
调用此方法时,将显示AlertDialog

无论我尝试了什么,都没有帮助。AlertDialog不会在第一次呼叫时出现,但不知道为什么


稍后编辑:我发现AlertDialog从递归循环中出来后实际上会出现,但我不知道如何在它开始循环之前强制显示它。这将是我的目标,通知用户一个更长的进程正在启动。启动进程没有意义,用户不知道发生了什么g、

最后,我可以通过将purchaseLoop放到这样一个单独的线程来解决这个问题

fun SubmitAd() {
var addInApp: Boolean = false
ToBePurchased = 0

if (CheckCanUpload()) {
    var AlertView = AlertDialog.Builder(requireActivity())
    AlertView.setTitle("Hirdetés feltöltés")
    AlertView.setMessage("A feltöltés előkészítése hosszabb ideig is eltarhat, kérjük várjon!")
    AlertView.setCancelable(false)

    DialogToShow = AlertView.create()
    DialogToShow!!.show()

    purchaseLoop = 0

    ******** SOLUTION HERE ********

    Thread {
        UploadWithPurchase()
    }.start()

    *******************************

} else {
    var AlertView = AlertDialog.Builder(requireActivity())
    AlertView.setTitle("Hirdetés hiba")
    AlertView.setMessage("A hirdetése hiányos. Kérjük töltse ki az összes mezőt és csatoljon fotót a hirdetéséhez!")
    AlertView.setPositiveButton("Ok") { dialog, which ->
        dialog.dismiss()
    }
    DialogToShow = AlertView.create()
    DialogToShow!!.show()
}
}

fun SubmitAd() {
var addInApp: Boolean = false
ToBePurchased = 0

if (CheckCanUpload()) {
    var AlertView = AlertDialog.Builder(requireActivity())
    AlertView.setTitle("Hirdetés feltöltés")
    AlertView.setMessage("A feltöltés előkészítése hosszabb ideig is eltarhat, kérjük várjon!")
    AlertView.setCancelable(false)

    DialogToShow = AlertView.create()
    DialogToShow!!.show()

    purchaseLoop = 0

    ******** SOLUTION HERE ********

    Thread {
        UploadWithPurchase()
    }.start()

    *******************************

} else {
    var AlertView = AlertDialog.Builder(requireActivity())
    AlertView.setTitle("Hirdetés hiba")
    AlertView.setMessage("A hirdetése hiányos. Kérjük töltse ki az összes mezőt és csatoljon fotót a hirdetéséhez!")
    AlertView.setPositiveButton("Ok") { dialog, which ->
        dialog.dismiss()
    }
    DialogToShow = AlertView.create()
    DialogToShow!!.show()
}