2009-12-18 122 views
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什么,因为它的覆盖方法。我讨厌做一个只存储当前消息应该存在的父活动的成员变量。你们怎么做到的?

感谢

+0

我相信你坚持使用成员变量选项...对不起。 – rui

+0

是啊,看起来这样,真可惜!谢谢 – Mark

+0

是!这对开发人员来说是一种耻辱。我们需要编写这样一个奇怪的模式来显示对话框。 –

回答

3

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

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

你仍然必须保持跟踪消息你在你当前活动的表现,但至少这种方式,你不创造每一个Dialog对象你想要显示的消息。

+1

嗯,这里的问题是一样的,你不能传递你在调用showDialog()到onPrepareDialog或onCreateDialog()的字符串消息... – rui

+0

啊,我的坏...我想我误解了这个问题。 –

+0

是的,这是真正的主要问题,你需要这个奇怪的模式来获得动态消息字符串到对话框 - 它感觉真的很尴尬!谢谢 – Mark

4

如果我这样做,对话框会泄漏 当我转动那个电话(不 提到它会消失一样,所以 用户可能错过它)

您可以添加

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

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

+0

是的,android:configChanges =“orientation”是要走的路。它阻止了“onCreate”的执行,并让应用程序在旋转手机时保持相同的状态 – datayeah

0

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