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();