Todavía puede seleccionar fechas deshabilitadas en el selector de fechas

Quiero desactivar las fechas pasadas del selector de fecha en android. Puedo hacerlo usando

dialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000); 

Esto está funcionando bien y las fechas pasadas en selector de fecha se ve deshabilitada. Pero todavía puedo hacer clic en una fecha anterior y seleccionarla. ¿Cómo no dejar que eso suceda? A continuación se muestra la captura de pantalla de mi selector de fechas: –

Introduzca aquí la descripción de la imagen

Y aquí está mi código donde estoy desactivando las fechas pasadas: –

 @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // Use the current date as the default date in the picker final Calendar c = Calendar.getInstance(); int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH); int day = c.get(Calendar.DAY_OF_MONTH); mActivity = new WeakReference<CreateEvent>( (CreateEvent) getActivity()); DatePickerDialog dialog = new DatePickerDialog(getActivity(), this, year, month, day); if(callingView==fromDate){ dialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000); }else if (callingView==toDate){ dialog.getDatePicker().setMinDate(fromD); } // Create a new instance of DatePickerDialog and return it return dialog; } 

Tengo que saber por un comentario que se trata de un error en Lollipop. Por lo tanto, lo fijó programatically.

Todo lo que necesitas hacer es comprobar la fecha seleccionada con la fecha mínima establecida.

Sí, es un error y es necesario comprobar la fecha seleccionada mediante el código java.

Para la fecha anterior

 public static boolean validatePastDate(Context mContext,int day,int month,int year){ final Calendar c = Calendar.getInstance(); int currentYear = c.get(Calendar.YEAR); int currentMonth = c.get(Calendar.MONTH)+1; int currentDay = c.get(Calendar.DAY_OF_MONTH); if (day > currentDay && year == currentYear && month == currentMonth) { Toast.makeText(mContext, "Please select valid date", Toast.LENGTH_LONG).show(); return false; } else if (month > currentMonth && year == currentYear) { Toast.makeText(mContext, "Please select valid month", Toast.LENGTH_LONG).show(); return false; } else if (year > currentYear) { Toast.makeText(mContext, "Please select valid year", Toast.LENGTH_LONG).show(); return false; } return true; } 

Para la fecha futura

 public static boolean validateFutureDate(Context mContext,int day,int month,int year){ final Calendar c = Calendar.getInstance(); int currentYear = c.get(Calendar.YEAR); int currentMonth = c.get(Calendar.MONTH)+1; int currentDay = c.get(Calendar.DAY_OF_MONTH); if (day < currentDay && year == currentYear && month == currentMonth) { Toast.makeText(mContext, "Please select valid date", Toast.LENGTH_LONG).show(); return false; } else if (month < currentMonth && year == currentYear) { Toast.makeText(mContext, "Please select valid month", Toast.LENGTH_LONG).show(); return false; } else if (year < currentYear) { Toast.makeText(mContext, "Please select valid year", Toast.LENGTH_LONG).show(); return false; } return true; } 

Simplemente pasa la fecha seleccionada mes, año en este método y devolverá el valor booleano.

 datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000); 

Para resolver el error de Android Lollipop puede validar la fecha como se indica a continuación:

  int mYear,mMonth,mDay; Calendar mcurrentDate = Calendar.getInstance(); mYear = mcurrentDate.get(Calendar.YEAR); mMonth = mcurrentDate.get(Calendar.MONTH); mDay = mcurrentDate.get(Calendar.DAY_OF_MONTH); DatePickerDialog mDatePicker = new DatePickerDialog(context, new DatePickerDialog.OnDateSetListener() { public void onDateSet(DatePicker datepicker, int selectedyear, int selectedmonth, int selectedday) { // TODO Auto-generated method stub // validate here with condition to avoid to select past dates if (selectedyear == mYear && (selectedmonth+1) == mMonth+1) { if(selectedday < mDay){ Toast.makeText(context, "invalid date", Toast.LENGTH_LONG).show(); return; } } textview.setText(selectedday + "/" + (selectedmonth+1) + "/" + selectedyear); } }, mYear, mMonth, mDay); mDatePicker.getDatePicker().setMinDate(System.currentTimeMillis() - 1000); if(!mDatePicker.isShowing()){ mDatePicker.show(); } 
  • Java (Android) convertir la fecha de SQLite a "x días atrás"
  • ¿Cómo incluir milisegundos en una cadena de fecha con formato?
  • Cómo convertir una hora de GMT a EST
  • Mala "semana del año" en Android
  • Obtener la hora y la fecha actuales en Android
  • Fecha y hora de la fecha
  • Cómo obtener la fecha actual y el huso horario en formato de números
  • Lengua ucraniana de Android
  • Mostrar fecha solamente y no hay tiempo en Android
  • Obtener la hora y la fecha actuales en una escala de tiempo de 24 horas
  • Android - Formato de la marca de tiempo en ListView con el adaptador de cursor
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.