我需要在datepicker控件中禁用过去的日期。此控件在对话框中打开,我想要禁用过去的日期,以便在选择过去的日期时抛出错误。
答案 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);
}