显示简单的消息对话框

7
在我的活动中,我想展示简单的信息对话框,例如:
new AlertDialog.Builder(context).setMessage(message).show();

如果我这样做,当我旋转手机时,对话框会泄漏(更不用说它也会消失,所以用户可能会错过它)。我可以使用托管对话框,但我不确定如何明智地将其用于这些类型的短消息?看起来你必须这样做:

showDialog(SOME_DLG_ID);
...
@Override
onCreateDialog(int id) {
    if (id == SOME_DLG_ID) {
        new AlertDialog.Builder(context).setMessage(message).show();
    }
}

由于onCreateDialog是一个重写方法,因此无法将消息传递给它。我不想创建一个仅存储当前消息的父活动成员变量。你们都是如何解决这个问题的?

谢谢


我相信你卡在了成员变量选项上...抱歉。 - rui
是的,看起来是这样,真遗憾!谢谢。 - Mark
是的!这对开发人员来说很遗憾。我们需要以奇怪的方式编写代码才能显示对话框。 - Cheok Yan Cheng
3个回答

4
如果我这么做,当我旋转手机时对话框会泄漏(更不用说它也会消失,所以用户可能会错过它)。您可以添加


<activity 
    android:configChanges="orientation|keyboardHidden"
>

在AndroidManifest.xml文件中添加以下代码可以防止手机旋转时重新启动活动。我在我的应用程序中使用它,我的AlertDialog在手机旋转的情况下仍然存在。


没错,android:configChanges="orientation" 是正确的方法。它可以防止执行 "onCreate" 并使应用程序在旋转手机时保持相同的状态。 - dy_

3

您可以实现Activity.onPrepareDialog(int, Dialog)方法,在对话框显示在屏幕上之前切换消息。因此,您可以进行如下操作:

@Override protected void onPrepareDialog(int id, Dialog dialog) {
    if (id == SOME_DLG_ID) {
        ((AlertDialog) dialog).setMessage(message);
    }
}

您仍然需要跟踪您正在活动中显示的消息,但至少这样做,您不会为每个要显示的消息创建一个对话框对象。


1
问题在于,您无法将调用showDialog()时拥有的字符串消息传递到onPrepareDialog或onCreateDialog()。 - rui
啊,我的错...我想我误解了问题。 - Erich Douglass
是的,这真的是主要问题,你需要这个奇怪的模式才能将动态消息字符串传递到对话框中 - 它感觉非常尴尬!谢谢。 - Mark

0
使用DialogFragment来管理对话框可以确保它正确处理生命周期事件,例如当用户旋转屏幕或按下返回按钮时。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接