Как не дать закрыться AlertDialog при нажатии на PositiveButton по условию

При попытке обработать нажатия кнопки "Регистрация" в AlertDialog не могу не дать закрыться окну. Не важно какую кнопку нажимаешь отмена или регистрация, окно диалога все равно закрывается. Как предотвратить закрытие окна по условию.

    public void showRegisterWindow(View view) {
        AlertDialog.Builder dialog = new AlertDialog.Builder(this);
        LayoutInflater inflater = LayoutInflater.from(this);
        View regWindow = inflater.inflate(R.layout.register_form, null);
        final TextInputEditText userName = regWindow.findViewById(R.id.userName);
        final TextInputEditText phone = regWindow.findViewById(R.id.phone);

        dialog.setTitle("Авторизация телефона")
            .setMessage("Введите данные для регистрации")
            .setView(regWindow)
            .setPositiveButton("Регистрация", (dialogInterface, i) -> {
                if (TextUtils.isEmpty(userName.getText())) {
                    Toast.makeText(this, "Введите имя", Toast.LENGTH_LONG).show();
                    return;
                }
                // чик-чик код
            })
            .setNegativeButton("Отмена", (dialogInterface, id) -> dialogInterface.dismiss())
            .create();
        dialog.show();
    }

Даже если вместо обработчика кнопки ставить null все равно закрывается.


Ответы (1 шт):

Автор решения: merlinby

Благодоря Arty Morris в соседней ветке переделал код:

public void showRegisterWindow(View view) {
    AlertDialog.Builder dialog = new AlertDialog.Builder(this);
    LayoutInflater inflater = LayoutInflater.from(this);
    View regWindow = inflater.inflate(R.layout.register_form, null);
    final TextInputEditText userName = regWindow.findViewById(R.id.userName);
    final TextInputEditText phone = regWindow.findViewById(R.id.phone);

    dialog.setTitle("Авторизация телефона")
        .setMessage("Введите данные для регистрации")
        .setView(regWindow)
        .setPositiveButton("Регистрация", null)
        .setNegativeButton("Отмена", null);
    AlertDialog alertDialog = dialog.create();
    alertDialog.show();
    alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(v -> {
        if (TextUtils.isEmpty(userName.getText())) {
            Toast.makeText(this, "Введите имя", Toast.LENGTH_LONG).show();
        } else {
            String userString = Objects.requireNonNull(userName.getText()).toString();
            String phoneString = Objects.requireNonNull(phone.getText()).toString();
            alertDialog.dismiss();
            registerUser(userString,phoneString);
        }
    });
}
→ Ссылка