【问题标题】:Showing simple message dialogs显示简单的消息对话框
【发布时间】:2009-12-18 17:09:42
【问题描述】:

在我的活动中,我想显示简单的信息对话框,例如:

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 因为它是一个覆盖方法。我不想为父活动创建一个成员变量,它只存储当前消息应该是什么。大家是怎么做到的?

谢谢

【问题讨论】:

  • 我相信你被成员变量选项卡住了......对不起。
  • 是的,看起来那样,真可惜!谢谢
  • 是的!这对开发者来说是一种耻辱。我们需要以这种奇怪的模式编写代码,只是为了显示对话框。

标签: android


【解决方案1】:

如果我这样做,对话框将泄漏 当我旋转那部手机时(不要 提到它也会消失,所以 用户可能会错过)

你可以添加

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

到您的 AndroidManifest.xml 以防止在手机旋转时重新启动活动。我在我的应用程序中使用它,并且我的 AlertDialog 在手机旋转后仍然存在。

【讨论】:

  • 是的,android:configChanges="orientation" 是要走的路。它会阻止“onCreate”的执行,并让应用在旋转手机时保持相同的状态
【解决方案2】:

您可以实现Activity.onPrepareDialog(int, Dialog) 在屏幕上显示对话框之前切换消息。所以你可以这样做:

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

您仍然需要跟踪当前在 Activity 中显示的消息,但至少这样,您不会为要显示的每条消息创建一个 Dialog 对象。

【讨论】:

  • 嗯,这里的问题是一样的,你不能将你在调用 showDialog() 时的字符串消息传递给 onPrepareDialog 或 onCreateDialog()...
  • 啊,我的错...我想我误解了这个问题。
  • 是的,这确实是主要问题,您需要这种奇怪的模式来获取对话框的动态消息字符串 - 感觉真的很尴尬!谢谢
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2019-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多