Не работает код при нажатии на кнопку добавить во всплывающем окне

Рейтинг: -3Ответов: 1Опубликовано: 09.01.2023
public void SignUp(View view) {

        AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
        dialog.setTitle("Зарегистрироваться")
                .setMessage("Введите все данные для регистрации")
                .setCancelable(false);

        LayoutInflater inflater = LayoutInflater.from(this);
        View registerWindow = inflater.inflate(R.layout.activity_second, null);
        dialog.setView(registerWindow);

        dialog.setNegativeButton("Отменить", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                dialogInterface.cancel();
            }
        });

        dialog.setPositiveButton("Добавить", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int which) {
                EditText email = findViewById(R.id.email_field);
                EditText pass = findViewById(R.id.password);
                EditText name = findViewById(R.id.name);
                EditText numb = findViewById(R.id.number);


                User newUser = new User();
                newUser.setId(database.getKey());
                newUser.setEmail(email.getText().toString());
                newUser.setPass(pass.getText().toString());
                newUser.setName(name.getText().toString());
                newUser.setNumb(numb.getText().toString());
                database.push().setValue(newUser);

                }
        });
        dialog.show();

Android Java, Вылетает из программы без ошибки при нажатии на кнопку добавить, если установить тот же код к другой обычной кнопке, то он срабатывает без проблем. Как я понимаю проблема именно в диалоговом окне

Ответы

▲ 1

Я так понимаю поля ввода располагаются в самом диалоге.
Тогда и искать их нужно в диалоге, вызывая его метод findViewById(), а не одноимённый метод активити, потому что в активити этих полей нет.

        dialog.setPositiveButton("Добавить", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int which) {
                Dialog dialog = (Dialog) dialogInterface;
                EditText email = dialog.findViewById(R.id.email_field);
                EditText pass = dialog.findViewById(R.id.password);
                EditText name = dialog.findViewById(R.id.name);
                EditText numb = dialog.findViewById(R.id.number);


                User newUser = new User();
                newUser.setId(database.getKey());
                newUser.setEmail(email.getText().toString());
                newUser.setPass(pass.getText().toString());
                newUser.setName(name.getText().toString());
                newUser.setNumb(numb.getText().toString());
                database.push().setValue(newUser);

                }
        });