setOnClickListener для кнопки DialogFragment?

Я показываю DialogFragment, когда пользователь нажимает кнопку «Настроить» для элемента.

btnCustomize.setOnClickListener(new View.OnClickListener(){
    @Override public void onClick(View v){
        CustomDialog dialog = new CustomDialog();
        FragmentManager manager = ((Activity) context).getFragmentManager();
        dialog.show(manager,"tag");
        // the line below throws null pointer exception
        Button btnCustomConfirm = v.findViewById(R.id.btnCustomConfirm);
        btnCustomConfirm.setOnClickListener(new View.OnClickListener(){
            @Override public void onClick(View v){
                //
            }
        });
    }
}

В XML-файле макета диалогового окна есть кнопка btnCustomConfirm, но строка btnCustomConfirm.setOnClickListener(...) генерирует исключение nullpointerexception:

java.lang.NullPointerException: попытка вызвать виртуальный метод «void android.view.View.setOnClickListener(android.view.View$OnClickListener)» для нулевой ссылки на объект


person Community    schedule 27.05.2018    source источник
comment
stackoverflow.com/questions/18601049 /   -  person Max    schedule 27.05.2018
comment
Переместите findViewById в onCreate, а зачем вставлять одно onClick в другое?   -  person Suleyman    schedule 27.05.2018
comment
DialogFragment показывает несколько флажков, чтобы пользователь мог выбрать параметры, и когда пользователь нажимает кнопку «ОК» в диалоговом окне, я хочу пройтись по флажкам, чтобы увидеть, какие из них отмечены. Итак, я пытаюсь просто сделать onClickListener для этой кнопки «ОК» и поместить в нее логику. Первый onClick — это когда пользователь нажимает кнопку настройки, которая вызывает открытие диалогового окна.   -  person    schedule 27.05.2018
comment
Итак, вы пытались переместить findViewById в onCreate? В основном ваша ошибка означает, что кнопка имеет значение null, поэтому она не инициализируется при вызове setOnclickListener.   -  person Suleyman    schedule 27.05.2018
comment
Я заработал, используя обычный AlertDialog.Builder вместо DialogFragment. С AlertDialog setOnClickListener отлично работает   -  person    schedule 27.05.2018


Ответы (1)


Попробуйте изменить строку на

Button btnCustomConfirm = v.findViewById(R.id.btnCustomConfirm);

Кроме того, я предполагаю, что у вас есть кнопка с идентификатором btnCustomConfirm в макете XML диалогового окна.

person Huzaifa Iftikhar    schedule 27.05.2018
comment
который исправляет первое исключение нулевого указателя, но затем btnCustomConfirm.setOnClickListener(...) выдает ошибку (...нулевая ссылка на объект) - person ; 27.05.2018