Android - 更改AlertDialog中积极按钮的文本

4

我在我的安卓应用中重复使用一个AlertDialog对话框。

我在onCreateDialog()方法中创建了一个对话框,在onPrepareDialog()方法中,我尝试使用以下代码更改positiveButton的文本。

alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, this.getString(R.string.add), new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int id) {
          //Handler code
    }
}

onclick监听器已更改,但按钮文本未更改。

这是Android中的错误还是我做错了什么?

2个回答

22

一种解决方法是强制刷新按钮。例如,一个用于取消长时间操作的按钮,在完成后可能会变成“OK”,如下所示:

Button button = progressDialog.getButton(ProgressDialog.BUTTON1);
button.setText("OK");
button.invalidate();

值得注意的是,如果您在onPrepareDialog中对AlertDialog的按钮执行此操作(就像问题中那样),则甚至不需要invalidate()。我想这可能是因为此时对话框尚未显示在屏幕上。谢谢! - Matt Gibson

-1

这对我有效

@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {

        case DIALOG_ID:
            return AlertDialog.Builder(this).setTitle(R.string.contact_groups_add)
    .setView(addView).setPositiveButton(R.string.ok,
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog,
                        int whichButton) {

                }
            }).setNegativeButton(R.string.cancel,
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog,
                        int whichButton) {
                }
            }).create();
    }
    return null;
}

你把这段代码放在了onCreateDialog()还是onPrepareDialog()中? - Sudar
其中没有一个。我没有重复使用那些活动的方法。这段代码只是显示带有addView(事先膨胀)视图的警报对话框。 - Pentium10
我理解这段代码。但我的问题不同。我已经使用了onCreateDialog()和onPrepareDialog()函数。我在onCreateDialog()方法中创建了对话框,但是当我尝试在onPrepareDialog()中更改正按钮的文本时,它只会更改onClickListner而不是文本。 - Sudar
你可以轻松地根据自己的需求调整我的示例。只需调用.create();而不是show(),并在您的onCreateDialog方法中返回代码创建的Dialog即可。 - Pentium10
我的onCreateDialog ()代码正常工作,没有任何问题。 我的问题是,当我尝试在使用setButton()方法更改onPrepareDialog()中的正按钮文本时,文本未更改。我之所以在onPreapareDialog()中这样做的原因是,只有在创建对话框时第一次调用onCreateDialog()。我想重用同一个对话框,但只将正按钮文本从“添加”更改为“编辑”。 当我使用setButton方法设置文本时,它没有得到更改。 - Sudar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接