如何使用showDialog(id)更新AlertDialog内容

时间:2011-11-04 10:15:40

标签: java android android-dialog

我希望在我的应用程序中有一个alertdialog,每次显示时都会更新其消息。 这是因为对话框值取决于应用程序上的某些值。

现在我尝试使用showDialog方法:

@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
    showDialog(RESULT_DIALOG);
    return false;
}

但是一旦创建了对话框,它就不会改变消息(我知道如果创建了对话框,它会使用已启动的版本)。

我的onCreateDialog方法代码是:

public Dialog onCreateDialog(int dialogId) {
    AlertDialog dialog;
    switch(dialogId) {
    case RESULT_DIALOG:
        // do the work to define the pause Dialog
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage(localTv.getText())
               .setCancelable(false)
               .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                        dialog.cancel();
                   }
               });                                 
        dialog = builder.create();
        break;
    default:
        dialog = null;
    }
    return dialog;
}

有一种方法可以更新AlertDialog的内容。 实际上我每次调用onTouch事件时都会创建一个新的对话框。但我不确定这是解决这个问题最干净的方法。

有什么想法吗? 谢谢:)

2 个答案:

答案 0 :(得分:6)

你必须使用onPrepareDialog方法:

@Override
protected void onPrepareDialog ( int id, Dialog dialog ) {
    switch ( id ) {
        case RESULT_DIALOG:
            AlertDialog alertDialog = ( AlertDialog ) dialog;
            alertDialog.setMessage( localTv.getText() );
            break;
    }
    super.onPrepareDialog( id, dialog );
}

来自http://developer.android.com/guide/topics/ui/dialogs.html

  

在显示对话框之前,Android也会调用可选项   回调方法onPrepareDialog(int,Dialog)。如果,请定义此方法   您希望每次都更改对话框的任何属性   打开。每次打开对话框时都会调用此方法,而   onCreateDialog(int)仅在对话框第一次调用时才会被调用   打开。如果没有定义onPrepareDialog(),那么对话框就会出现   保持与上一次打开时相同。这种方法   也会传递对话框的ID以及Dialog对象   在onCreateDialog()中创建。

答案 1 :(得分:2)

您可以随时使用onPrepareDialog更改对话框,也可以删除对话框(因此它将始终通过onCreateDialog)设置onDismiss(dialog.setOnDismiss)以删除对话框ID(removeDialog(id))。