Почему alert.getButton (AlertDialog.BUTTON_POSITIVE) возвращает значение NULL? - PullRequest
3 голосов
/ 20 октября 2011

(Извините, узнал, что на этот вопрос уже дан ответ, см. Ниже)

Итак, я сначала попытался расширить AlertDialog , чтобы я мог сделатьнекоторые вещи с EditTexts мне нужно иметь в моем всплывающем окне, но когда я не мог заставить это работать , я теперь использую обычный AlertDialog.Builder внутри своей MainActivity, чтобы создать то, что мне нужно.

Приведенный ниже код создает AlertDialog и использует «setView» для добавления к нему моего пользовательского представления.Когда AlertDialog отображается впервые, его кнопка POSITIVE должна быть отключена, и только когда все EditTexts имеют текст, кнопка POSITIVT должна быть включена.

Поэтому я пытаюсь сделать это, после использования builder.create (), получив положительную кнопку.

Однако alert.getButton (AlertDialog.BUTTON_POSITIVE) возвращает NULL .Почему?

final EditText ed1 = (EditText) findViewById(R.id.editTextPausArea);
final EditText ed2 = (EditText) findViewById(R.id.EditTextPausTimeFrom);
final EditText ed3 = (EditText) findViewById(R.id.EditTextPausTimeTo);

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this)
.setTitle("Begär paus")
.setView(view)
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {


    }
}).setNegativeButton("Avbryt", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
        // Do nothing.
    }
});

final AlertDialog alert = builder.create();
final Button b = alert.getButton(AlertDialog.BUTTON_POSITIVE);
b.setEnabled(false); // NullPointerException here!

Ответы [ 2 ]

7 голосов
/ 10 июня 2012

У меня была такая же проблема. Моим рабочим решением этой проблемы было позвонить:

alert.show()

до доступа к кнопке

0 голосов
/ 20 октября 2011

это может помочь

.setPositiveButton("OK", new android.content.DialogInterface.OnClickListener() {                
    @Override
    public void onClick(DialogInterface dialog, int which) {
         ((AlertDialog)dialog).getButton(which).setVisibility(View.INVISIBLE);

    }
})
...