Android - изменить текст положительной кнопки AlertDialog

Я повторно использую окно AlertDialog в своем приложении для Android.

Я создаю диалог в методе onCreateDialog() и в методе onPrepareDialog() и пытаюсь изменить текст положительной кнопки, используя следующий код.

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

Слушатель onclick меняется, но текст кнопки не меняется.

Это баг андроида или я что-то не так делаю?


person Sudar    schedule 27.07.2010    source источник


Ответы (2)


Одно из решений — просто заставить кнопку перерисовываться. Например, кнопка для отмены длительной операции может измениться на «ОК» по завершении, например.

Button button = progressDialog.getButton(ProgressDialog.BUTTON1);
button.setText("OK");
button.invalidate();
person user527897    schedule 02.12.2010
comment
Спасибо! Стоит отметить, что если вы сделаете это с кнопками AlertDialog в onPrepareDialog, как и в вопросе, вам даже не понадобится invalidate(). Я предполагаю, что это, вероятно, потому, что диалог в этот момент не отображается на экране. - person Matt Gibson; 19.01.2012

Это работает для меня

@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;
}
person Pentium10    schedule 27.07.2010
comment
У вас есть этот код в onCreateDialog() или в onPrepareDialog()? - person Sudar; 27.07.2010
comment
Ни в одном из них. Я не использовал повторно эти методы деятельности. Этот код просто показывает диалоговое окно предупреждения с представлением из addView (раздутое до). - person Pentium10; 27.07.2010
comment
Я понимаю этот код. Но мой вопрос был в другом. Я уже использую функции onCreateDialog() и onPrepareDialog(). Я создал диалог в методе onCreateDilaog(), но когда я пытаюсь изменить текст положительной кнопки в onPrepareDialog(), он меняет только onClickListener, а не текст. - person Sudar; 27.07.2010
comment
Вы можете легко адаптировать мой пример под свои нужды. Просто вызовите .create(); вместо show() и верните в свой метод onCreateDialog Dialog, созданный кодом. - person Pentium10; 27.07.2010
comment
Мой код onCreateDialog() работает без проблем. Моя проблема в том, что когда я пытаюсь изменить текст положительной кнопки в onPrepareDialog() с помощью метода setButton(), текст не изменяется. Причина, по которой я делаю это в onPreapareDialog(), заключается в том, что onCreateDialog() будет вызываться только один раз, когда диалог создается в первый раз. Я хочу повторно использовать тот же диалог, но только изменить текст положительной кнопки с «Добавить» на «Редактировать». Когда я устанавливаю текст с помощью метода setButton, он не изменяется. - person Sudar; 27.07.2010