Android 如果我没有';你不知道现在的情况吗?
作为后台http操作的结果,我必须在前台活动中显示一个对话框 当对话框出现时,它可能无处不在,上下文可以更改,例如,我开始了一项新活动 如果我使用applicationContext显示我得到的对话框: 05-04 17:32:32.560:E/AndroidRuntime(3663): android.view.WindowManager$BadTokenException:无法添加窗口-- 令牌null不适用于应用程序 所以。。。我怎样才能达到我的目标Android 如果我没有';你不知道现在的情况吗?,android,dialog,android-context,Android,Dialog,Android Context,作为后台http操作的结果,我必须在前台活动中显示一个对话框 当对话框出现时,它可能无处不在,上下文可以更改,例如,我开始了一项新活动 如果我使用applicationContext显示我得到的对话框: 05-04 17:32:32.560:E/AndroidRuntime(3663): android.view.WindowManager$BadTokenException:无法添加窗口-- 令牌null不适用于应用程序 所以。。。我怎样才能达到我的目标 有什么建议吗?无论何时何地创建对话框,
有什么建议吗?无论何时何地创建对话框,您都会在活动中,对吗?为什么不将该活动用作上下文 在我自己的代码中,我创建了一个帮助器类,它为我创建了一个对话框。我将当前活动、标题和消息传递到该助手类中。它构造对话框并返回我可以管理的AlertDialog对象
您可以尝试这样做,但是您仍然需要知道您希望对话框显示的上下文/活动。您需要一种方法来通知前台活动操作已完成,您可以通过注册一个侦听器来完成此操作,因为您没有发布任何代码,我将做出假设 我知道有两种方法可以通知前台活动,第一种方法是使用广播意图,这里有一个关于它们的问题。您可以从后台操作触发广播意图,并将您的活动注册为接收器 看看这里和这里 第二种方法是向执行后台操作的类注册侦听器,例如(伪代码) 您的侦听器可以是这样的(您的活动可以实现):
这里的想法是,您的前台活动将是当前注册的侦听器,因此它将是onOperationComplete(…)回调的接收者,然后您可以显示您的对话框,即。。。操作完成后,可以向活动传递任意数量的参数。我认为您需要的是获取任务的顶部活动(当前显示活动),然后使用它显示对话框 因此,请参见以下线程:
编辑:从后台显示一个对话框不是一个好的用户体验,你可以发送通知或只是做一个长时间的祝酒词。在我看来,最好的方法是创建一个新的活动,并像使用对话框一样使用它。 步骤如下:
<activity
android:theme="@style/AppTheme.Dialog"
android:name="com.myapp.original.example"
android:label="@string/timy_titlle" >
这里有一个类似的问题:您看到我的答案了吗?不,我看不到,因为在等待后台结果(使用处理程序)时,我可以启动一个新的活动来更改当前上下文。上一个活动的处理程序不能在处理程序所在的活动(您的解决方案)中显示对话框,而是在新的活动中显示对话框。问题是。。。如何知道哪个是前台活动?好的,我已经更新了我的答案,以便活动在onResume和onPause中注册,这将确保只有前台活动从后台操作中得到回调,希望这会有所帮助。顺便说一下,如果您正在进行web请求,我强烈建议您查看Virgil Dobjanschi的Google IO REST演示,他描述了一个类似的方法(关于他的Service Helper类)
interface BackgroundOperatorListener {
void onOperationComplete(...);
}
<activity
android:theme="@style/AppTheme.Dialog"
android:name="com.myapp.original.example"
android:label="@string/timy_titlle" >