java - reales - Detener el cierre del DatePickerDialog cuando se usa hace clic en el botón Establecer
libro de android studio en español pdf (1)
Implementé DatePickerDialog
usando el ejemplo que se muestra aquí .
En mi implementación de DatePickerDialog.OnDateSetListener
agregué la lógica de validación para verificar que la fecha seleccionada esté dentro del rango específico.
private final DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int y, int m,
int d) {
final Calendar calendar = Calendar.getInstance();
calendar.set(y, m, d);
Date date = calendar.getTime();
if(!myValidationFunction(date)) {
// date not within allowed range
// cancel closing of dialog ?
}
}
};
El problema que tengo es que DatePickerDialog
se cierra automáticamente cuando el usuario hace clic en el botón Establecer y quiero mantener el DatePickerDialog
abierto si falla la regla de validación.
¿Alguien sabe cómo detener el cierre del DatePickerDialog
cuando el usuario hace clic en el botón Establecer?
Desde la API 11, el DatePicker puede validar su fecha por usted.
Siguiendo la guía a la que se refiere , al anular en CreateDialog, obtener DatePicker y establecer la fecha mínima y máxima:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// no changes from guide ...
final DatePickerDialog dialog = new DatePickerDialog(getActivity(), this, year, month, day);
dialog.getDatePicker().setMinDate(minDate);
dialog.getDatePicker().setMaxDate(minDate);
return dialog;
}
De esta forma, el usuario no puede elegir una fecha incorrecta, por lo que no es necesario validarla manualmente.
Para versiones anteriores, puede usar un booleano para control cuando se permite el cierre e implementar su propia lógica. Aquí trato de ilustrar dónde necesitarás extender tu código:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final DatePickerDialog dialog = new DatePickerDialog(getActivity(), this, year, month, day){
@Override
public void onBackPressed() {
allowClose = true;
super.onBackPressed();
}
@Override
public void onClick(DialogInterface dialog, int which) {
if (which==DialogInterface.BUTTON_POSITIVE && validate()){
allowClose = true;
}
super.onClick(dialog, which);
}
@Override
public void dismiss() {
if (allowClose) {
super.dismiss();
}
}
};
return dialog;
}
private void onCancelBtnClick() {
allowClose = true;
dismiss();
}