Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用showDialog(id)更新AlertDialog内容_Java_Android_Android Dialog - Fatal编程技术网

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

Java 如何使用showDialog(id)更新AlertDialog内容,java,android,android-dialog,Java,Android,Android Dialog,我希望在我的应用程序中有一个alertdialog,它的消息在每次显示时都会更新。 这是因为对话框值取决于应用程序上的某些值 现在我尝试使用showDialog方法: @Override public boolean onTouch(View arg0, MotionEvent arg1) { showDialog(RESULT_DIALOG); return false; } @Override protected void onPrepareDialog ( int id,

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

现在我尝试使用showDialog方法:

@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
    showDialog(RESULT_DIALOG);
    return false;
}
@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 );
}
但是一旦创建了对话框,它就不会更改消息(我知道如果创建了对话框,它将使用启动版本)

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

有什么想法吗?
谢谢:)

您必须使用onPrepareDialog方法:

@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
    showDialog(RESULT_DIALOG);
    return false;
}
@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 );
}
发件人:

在显示对话框之前,Android还会调用可选的 回调方法onPrepareDialog(int,Dialog)。如果需要,请定义此方法 每次打开对话框时都要更改其任何属性 开的。每次打开对话框时都会调用此方法,而 onCreateDialog(int)仅在第一次调用对话框时调用 开的。如果未定义onPrepareDialog(),则对话框将 与上次打开时保持相同。这种方法 还将传递对话框的ID以及您创建的对话框对象 在onCreateDialog()中创建


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