【问题标题】:How to update AlertDialog content using showDialog(id)如何使用 showDialog(id) 更新 AlertDialog 内容
【发布时间】:2011-11-04 18:34:55
【问题描述】:

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

现在我尝试使用 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 事件时,我都会创建一个新对话框。但我不确定这是解决这个问题的最干净的方法。

有什么想法吗? 谢谢:)

【问题讨论】:

    标签: java android android-dialog


    【解决方案1】:

    你必须使用 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() 中创建。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-05-30
        • 2018-06-23
        • 2021-05-10
        • 2017-05-21
        • 1970-01-01
        • 1970-01-01
        • 2022-07-19
        相关资源
        最近更新 更多