Android在datepicker中禁用过去的日期

时间:2011-01-07 11:25:42

标签: android

我需要在datepicker控件中禁用过去的日期。此控件在对话框中打开,我想要禁用过去的日期,以便在选择过去的日期时抛出错误。

4 个答案:

答案 0 :(得分:7)

我认为您正在使用DatePickerDialog而您必须传递给构造函数的OnDateSetListener不符合您的需求,因为您必须在之前抛出错误实际设定日期。

在这种情况下,您可以扩展DatePickerDialog并创建自己的OnDateChanged实现,每当日期更改时调用它,并获得DatePicker的参数,以及新的年,月和日值,所以你可以检查该日期是否已过去,在这种情况下抛出错误(使用Toast或其他)并调用DatePicker.updateDate()来设置正确的值(以便DatePicker始终处于一致状态)。

此外,您可以致电DatePicker.init(year, monthOfYear, dayOfMonth, onDateChangedListener);,然后您可以传递onDateChangedListener实施,而无需延长DatePickerDialog

答案 1 :(得分: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
              }

答案 2 :(得分:0)

如果您运行的是API 11或更高版本,请使用DatePicker上的setMinDate()方法。这会隐藏指定日期之前的所有日期。

答案 3 :(得分:0)

希望这会有所帮助。

public void openDateDialog(View view){     final Calendar 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);
    }