Android DatePickerDialog上的最大日期

Android DatePickerDialog上的最大日期,android,android-datepicker,Android,Android Datepicker,我需要在我正在使用的DatePickerDialog上设置一个最大年份,但我找不到任何机制来实现这一点。文档提到getDatePicker()是DatePickerDialog的公共方法。所以,我想,也许,这可以用来获取日期选择器,然后我可以设置最大日期,但是当我尝试获取日期选择器时,我得到了“methodundefined”错误 这就是我试图在onCreateDialog中获取日期选择器的方式 DatePickerDialog d = new DatePickerDialog(this, de

我需要在我正在使用的DatePickerDialog上设置一个最大年份,但我找不到任何机制来实现这一点。文档提到getDatePicker()是DatePickerDialog的公共方法。所以,我想,也许,这可以用来获取日期选择器,然后我可以设置最大日期,但是当我尝试获取日期选择器时,我得到了“methodundefined”错误

这就是我试图在onCreateDialog中获取日期选择器的方式

DatePickerDialog d = new DatePickerDialog(this, dep_dateListener, mYear,
                      mMonth, mDay);
DatePicker dp = d.getDatePicker();
dp.setMaxDate(maxDate);
return d;
有没有关于如何做到这一点的建议


感谢您,getDatePicker()方法在API级别11中可用

创建DatePickerDialog的子类

重写已更改的方法

import java.text.simpleDataFormat;
导入java.util.Calendar;
导入java.util.Date;
导入android.app.DatePickerDialog;
导入android.content.Context;
导入android.widget.DatePicker;
公共类MyDatePickerDialog扩展了DatePickerDialog{
非公开期末考试;
私人最后一个月;
minDay私人终审法院;
私人机构;
私人每月;
私人int maxDay;
私人最终日历;
专用最终SimpleDataFormat格式化程序;
公共MyDatePickerDialog(上下文上下文、OnDateSetListener回调、int年、int月、int月){
超级(上下文、回调、年、月、月);
mCalendar=Calendar.getInstance();
//建立心智
minYear=常量。minYear;
minMonth=常量。minMonth;
minDay=常数。minDay;
mCalendar.setTime(新日期());
//设置maxdate
mCalendar.add(Calendar.YEAR,Constant.maxBirthdayYearSinceNow);
maxYear=mCalendar.get(Calendar.YEAR);
maxMonth=mCalendar.get(Calendar.MONTH);
maxDay=mCalendar.get(Calendar.DATE);
//设置初始日期
mCalendar.set(日历年、年份);
mCalendar.set(日历月、月、年);
mCalendar.set(Calendar.DAY/u/u月,dayOfMonth);
//设置日期显示格式
格式化程序=新的SimpleDataFormat(“MM/dd/yyyy”);
setTitle(formatter.format(mCalendar.getTime());
}
@凌驾
公共无效onDateChanged(日期选择器视图、整数年、整数月、整数天){
布尔beforeMinDate=false;
布尔afterMaxDate=false;
如果(年最大日){
afterMaxDate=true;
}
}
}
}
//需要将无效日期设置为mindate或maxdate
如果(在MaxDate之前| |之后){
如果(事先){
年=年;
月=月;
白天=明日;
}
否则{
年份=最大年份;
月份=最大月份;
天=最大天;
}
view.updateDate(年、月、日);
}
//在视图标题中显示
mCalendar.set(日历年、年份);
mCalendar.set(Calendar.MONTH,MONTH);
mCalendar.set(Calendar.DAY\u OF_MONTH,DAY);
setTitle(formatter.format(mCalendar.getTime());
}
}
setMaxDate()
仅对新API有用,但如果您希望应用程序与早期版本配合使用,则必须为日期制作自己的比较器


例如,我只是使用
Calendar.getInstance()
date.before(date)
date.before(date)
方法获取本地日期。在(date)之后,您可以为
日期选择器添加限制,这是monodroid中更好的实现:

public DateTime MaxDate { get; set; }
public DateTime MinDate { get; set; }

public override void OnDateChanged(DatePicker view, int year, int month, int day)
    {
        var error = false;

        if (year < MinDate.Year)
        {
            error = true;
            year++;
        }
        else if (year == MinDate.Year)
        {
            if (month < MinDate.Month - 1)
            {
                error = true;
                month++;
            }
            else if (month == MinDate.Month - 1)
            {
                if (day < MinDate.Day)
                {
                    error = true;
                    day++;
                }
            }
        }

        if (!error)
        {
            if (year > MaxDate.Year)
            {
                error = true;
                year--;
            }
            else if (year == MaxDate.Year)
            {
                if (month > MaxDate.Month - 1)
                {
                    error = true;
                    month--;
                }
                else if (month == MaxDate.Month - 1)
                {
                    if (day > MaxDate.Day)
                    {
                        error = true;
                        day--;
                    }
                }
            }
        }

        if (error)
        {
            view.UpdateDate(year, month, day);
        }

    }
public DateTime MaxDate{get;set;}
公共日期时间MinDate{get;set;}
公共覆盖无效OnDateChanged(日期选择器视图、整数年、整数月、整数天)
{
var错误=错误;
如果(年份<起始年份)
{
错误=真;
年份++;
}
否则,如果(年份==MinDate.year)
{
如果(月最大日期年)
{
错误=真;
年--;
}
else if(年份==MaxDate.year)
{
如果(月>最大日期月-1)
{
错误=真;
月--;
}
else if(月==MaxDate.month-1)
{
如果(天>最大日期.天)
{
错误=真;
天——;
}
}
}
}
如果(错误)
{
view.UpdateDate(年、月、日);
}
}

这就是问题所在。谢谢。
DatePicker\setMaxDate(…)
public DateTime MaxDate { get; set; }
public DateTime MinDate { get; set; }

public override void OnDateChanged(DatePicker view, int year, int month, int day)
    {
        var error = false;

        if (year < MinDate.Year)
        {
            error = true;
            year++;
        }
        else if (year == MinDate.Year)
        {
            if (month < MinDate.Month - 1)
            {
                error = true;
                month++;
            }
            else if (month == MinDate.Month - 1)
            {
                if (day < MinDate.Day)
                {
                    error = true;
                    day++;
                }
            }
        }

        if (!error)
        {
            if (year > MaxDate.Year)
            {
                error = true;
                year--;
            }
            else if (year == MaxDate.Year)
            {
                if (month > MaxDate.Month - 1)
                {
                    error = true;
                    month--;
                }
                else if (month == MaxDate.Month - 1)
                {
                    if (day > MaxDate.Day)
                    {
                        error = true;
                        day--;
                    }
                }
            }
        }

        if (error)
        {
            view.UpdateDate(year, month, day);
        }

    }