Жизненный цикл диалога

Интерфейс, диалоги, темы, стили, меню
Ответить
Аватара пользователя
plesser
Сообщения: 25
Зарегистрирован: 10 ноя 2013, 14:05
Откуда: Жуковский

Жизненный цикл диалога

Сообщение plesser » 25 июл 2016, 21:33

Итак задачка, есть некая активность, которая при наступлении определенных событий с начало создает экземпляр класса, который является наследником DialogFragment.

Собственно в этом классе (поправьте меня если я ошибаюсь) определен метод onCreateDialog, который должен вызываться при вызове метода show() в родительской активности, дающий на выходе AlertDialog. Теперь сама загвоздка: мне надо что бы BUTTON_POSITIVE был задисаблен пока пользователь не сделает определенных действий в диалоговом окне. В итоге я написал такой код:

Код: Выделить всё

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setView(v);
        builder.setTitle(R.string.catalog);
        builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener(){

            @Override
            public void onClick(DialogInterface dialog, int which) {
                submit();
            }
        });

        final AlertDialog dialog = builder.create();
        dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);

        mCatalogName.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                if (mCatalogName.getText().toString().trim().equals("")) {
                    dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
                } else {
                    dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true);
                }

            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

        return dialog;
При выполнении программа падает вот на этой строчки

Код: Выделить всё

dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
с ошибкой: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setEnabled(boolean)' on a null object reference

собственно говоря - куда копать?

PS
приходит в голову отказаться от PositiveButton и использовать свою кнопку но возникает стойкое ощущение что это не правильно
При наличии доступа к Google - бесподобен.

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Жизненный цикл диалога

Сообщение klblk » 26 июл 2016, 05:39

Как я понимаю кнопки создаются на этапе вызова show() метода. Как вариант setEnabled() делать после show(), или повесить setOnShowListener().

Аватара пользователя
plesser
Сообщения: 25
Зарегистрирован: 10 ноя 2013, 14:05
Откуда: Жуковский

Re: Жизненный цикл диалога

Сообщение plesser » 26 июл 2016, 08:42

klblk писал(а):Как я понимаю кнопки создаются на этапе вызова show() метода. Как вариант setEnabled() делать после show(), или повесить setOnShowListener().
аха
понял вас, спасибо!
При наличии доступа к Google - бесподобен.

Ответить