AlertDialog с положительной кнопкой и проверка пользовательского EditText

Я создал простой AlertDialog с положительными и отрицательными кнопками. Положительная кнопка зарегистрировала DialogInterface.OnClickListener, где я получаю значение EditText. Я должен проверить его (например, если он должен быть не null), и если значение неверно, запретите закрывать это диалоговое окно. Как предотвратить отклонение диалога после нажатия и проверки?

Ответы

Ответ 1

Создание диалогового окна:

AlertDialog.Builder builder = new AlertDialog.Builder(YourActivity.this);
builder.setCancelable(false)
.setMessage("Please Enter data")
.setView(edtLayout) //<-- layout containing EditText
.setPositiveButton("Enter", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int id) {
        //All of the fun happens inside the CustomListener now.
        //I had to move it to enable data validation.
    }
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
Button theButton = alertDialog.getButton(DialogInterface.BUTTON_POSITIVE);
theButton.setOnClickListener(new CustomListener(alertDialog));

CustomListener:

class CustomListener implements View.OnClickListener {
    private final Dialog dialog;
    public CustomListener(Dialog dialog) {
        this.dialog = dialog;
    }
    @Override
    public void onClick(View v) {
        // put your code here
        String mValue = mEdtText.getText().toString();
        if(validate(mValue)){
            dialog.dismiss();
        }else{
            Toast.makeText(YourActivity.this, "Invalid data", Toast.LENGTH_SHORT).show();
        }
    }
}

Ответ 2

View view = getLayoutInflater().inflate(R.layout.custom_dialog, null);

EditText editTextEmail=(EditText)view.findViewById(R.id.edittext_email);

AlertDialog alertDialog = new AlertDialog.Builder(YourCurrentActivity.this)
        .setView(view)
        .setPositiveButton(R.string.lbl_ok, null)
        .setNegativeButton(R.string.lbl_cancel, null)
        .create();

alertDialog.setOnShowListener(new DialogInterface.OnShowListener() {
    @Override
    public void onShow(DialogInterface dialog) {

        Button buttonPositive = ((AlertDialog) dialog).getButton(DialogInterface.BUTTON_POSITIVE);
        buttonPositive.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
             // Do something when button positive clicked
             // Your validation is here
        });

        Button buttonNegative = ((AlertDialog) dialog).getButton(DialogInterface.BUTTON_NEGATIVE);
        buttonNegative.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                // Do something when button negative clicked
            }
        });
    }
});

    alertDialog.show();