【问题标题】:Android Activity.startActivity() and Dialog.show() orderAndroid Activity.startActivity() 和 Dialog.show() 顺序
【发布时间】:2011-02-07 22:35:16
【问题描述】:

当用户启动我的应用程序时,我需要显示一个类似于 EULA 的对话框,但我的应用程序也有一个启动屏幕,需要在对话框之前显示。我是这样编码的:

Activity A.onCreate(...) {
...
1. startActivity(Activity B) [this activity calls .finish() after x seconds]
2. dialog.show()
...
}

从逻辑上讲,这似乎应该可行。但是,当我从活动 B 回到活动 A 后,整个屏幕变暗,好像正在显示对话框,但没有对话框窗口。

我能够通过反转调用来解决这个问题,并且在活动 B 完成后显示对话框并且没有出现奇怪的问题:

Activity A.onCreate(...) {
...
1. dialog.show()
2. startActivity(Activity B) [this activity calls .finish() after x seconds]
...
}

有人知道为什么调用顺序如此重要吗?对我来说,它们应该是一样的。

【问题讨论】:

    标签: android android-activity dialog


    【解决方案1】:

    这两个函数都是异步函数。这意味着代码执行不会在它们上暂停,而是继续调用下一行。

    不是一个接一个地调用它们,您需要等待一个返回,然后再调用下一个。如果要先显示对话框,请添加onDismissListener 以在对话框关闭时进行监听。在该侦听器中,您可以开始下一个活动。

    【讨论】:

    • 反之,您可以使用 startActivityForResult() 调用活动 B,并在 onActivityResult() 方法中调用 .show()。
    • 我宁愿它首先是活动,然后是对话——有没有办法做到这一点而不使用 onActivityResult?
    • 为什么不想使用onActivityResult?这是活动结束后做某事的正确方法。不过,您似乎可以在初始屏幕上显示 eula,因此您可以从活动 B 启动对话框,并等待他们点击确定,然后隐藏初始屏幕。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多