显示简单的消息对话框

时间:2009-12-18 17:09:43

标签: android

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

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。我不想创建父活动的成员变量,只存储当前消息应该是什么。你们都是这样做的?

由于

3 个答案:

答案 0 :(得分:4)

  

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

您可以添加

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

到AndroidManifest.xml以防止在手机旋转时重新启动活动。我在我的应用程序中使用它,我的AlertDialog在电话轮换中幸存下来。

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:0)

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