Мне нужно отключить прошлые даты в элементе управления datepicker. Этот элемент управления открывается в диалоговом окне, там я хочу отключить прошлые даты, чтобы он выдавал ошибку, если выбрана прошедшая дата.Android Отключить даты в datepicker
ответ
Я полагаю, вы используете DatePickerDialog и OnDateSetListener, что вы должны передать в конструкторе не соответствуют вашим потребностям, потому что вы должны бросить ошибку до того дата фактически установлена.
В этом случае вы можете продлить DatePickerDialog и выполнить свою собственную реализацию OnDateChanged, которая вызывается каждый раз, когда изменяется дата, и вы получаете как параметры DatePicker, а также значения нового года, месяца и дня, чтобы вы могли проверить, эта дата прошла и в этом случае выдает ошибку (с помощью Toast или что-то еще) и вызывает DatePicker.updateDate(), чтобы установить правильное значение (так что DatePicker всегда в согласованном состоянии).
Кроме того, вы можете позвонить в DatePicker.init(year, monthOfYear, dayOfMonth, onDateChangedListener);
, то вы можете передать onDateChangedListener
реализации без расширения DatePickerDialog
Вы можете проверить дату вручную .. и ограничить пользователь от ввода неверной даты:
Проверьте следующий фрагмент коды :
if((futureDate.getDate() == currentDate1.getDate() && futureDate.getMonth()== currentDate1.getMonth() && futureDate.getYear() == currentDate1.getYear()))
{
if(futureDate.after(currentDate1))
{
// Accept Date
}
else
{
// Alert user Date is Invalid
}
}
else
{
// Alert user Date is Invalid
}
Если вы работаете API 11 или больше, используйте метод setMinDate() на DatePicker
. Это скрывает все даты до указанной даты.
Надеюсь, это поможет.
public void openDateDialog (View view) { final Календарь c = Calendar.getInstance(); final int dayOfMonth = c.get (Calendar.DAY_OF_MONTH); final int monthOfYear = c.get (Calendar.MONTH); final int year = c.get (Calendar.YEAR);
new MyDatePickerDialog(view.getContext(), null, year, monthOfYear, dayOfMonth).show();;
}
class MyDatePickerDialog extends DatePickerDialog {
public MyDatePickerDialog(Context context, OnDateSetListener callBack,
int year, int monthOfYear, int dayOfMonth) {
super(context, callBack, year, monthOfYear, dayOfMonth);
this.context = context;
}
private Context context;
@Override
public void onDateChanged(DatePicker view, int year, int month, int day) {
// TODO Auto-generated method stub
super.onDateChanged(view, year, month, day);
Calendar dareSelected = Calendar.getInstance();
dareSelected.set(year, month, day);
Calendar currentDate = Calendar.getInstance();
int a = dareSelected.compareTo(currentDate);
if(a<0){
Toast.makeText(context, "Invalid Date", Toast.LENGTH_SHORT).show();
}else{
setDate(year,month,day);
}
}
}
private void setDate(int year, int monthOfYear, int dayOfMonth){
tvText.setText(new StringBuilder().append(pad(dayOfMonth))
.append("-").append(pad(monthOfYear + 1)).append("-")
.append(pad(year)));
}
private static String pad(int c) {
if (c >= 10)
return String.valueOf(c);
else
return "0" + String.valueOf(c);
}