2011-01-07 3 views
0

Мне нужно отключить прошлые даты в элементе управления datepicker. Этот элемент управления открывается в диалоговом окне, там я хочу отключить прошлые даты, чтобы он выдавал ошибку, если выбрана прошедшая дата.Android Отключить даты в datepicker

ответ

7

Я полагаю, вы используете DatePickerDialog и OnDateSetListener, что вы должны передать в конструкторе не соответствуют вашим потребностям, потому что вы должны бросить ошибку до того дата фактически установлена.

В этом случае вы можете продлить DatePickerDialog и выполнить свою собственную реализацию OnDateChanged, которая вызывается каждый раз, когда изменяется дата, и вы получаете как параметры DatePicker, а также значения нового года, месяца и дня, чтобы вы могли проверить, эта дата прошла и в этом случае выдает ошибку (с помощью Toast или что-то еще) и вызывает DatePicker.updateDate(), чтобы установить правильное значение (так что DatePicker всегда в согласованном состоянии).

Кроме того, вы можете позвонить в DatePicker.init(year, monthOfYear, dayOfMonth, onDateChangedListener);, то вы можете передать onDateChangedListener реализации без расширения DatePickerDialog

1

Вы можете проверить дату вручную .. и ограничить пользователь от ввода неверной даты:

Проверьте следующий фрагмент коды :

 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 
       } 
0

Если вы работаете API 11 или больше, используйте метод setMinDate() на DatePicker. Это скрывает все даты до указанной даты.

0

Надеюсь, это поможет.

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