android datepickerDialog 不应该接受 future 的日期

标签 android datetime

我正在使用日期选择器对话框来选择用户的出生日期,因此我能够显示该对话框。但不应允许用户增加当前日期的年份或日期或月份。我该怎么做?

这是我的代码:

private int mYear;
     private int mMonth;
     private int mDay;
     static final int DATE_DIALOG_ID = 1;
     @Override
     protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.main);   

             Button pickDate = (Button) findViewById(R.id.but);
             pickDate.setOnClickListener(new View.OnClickListener() {
                     public void onClick(View v) {
                             showDialog(DATE_DIALOG_ID);
                     }
             });
             final Calendar c = Calendar.getInstance();
             mYear = c.get(Calendar.YEAR);
             mMonth = c.get(Calendar.MONTH);
             mDay = c.get(Calendar.DAY_OF_MONTH);             
     }
     @Override
     protected Dialog onCreateDialog(int id) {
             switch (id) {
             case DATE_DIALOG_ID:
                     return new DatePickerDialog(this,
                             mDateSetListener,
                             mYear, mMonth, mDay);
             }
             return null;
     }
     protected void onPrepareDialog(int id, Dialog dialog) {
             switch (id) {
             case DATE_DIALOG_ID:
                     ((DatePickerDialog) dialog).updateDate(mYear, mMonth, mDay);
                     break;
             }
     }    

     private DatePickerDialog.OnDateSetListener mDateSetListener =
             new DatePickerDialog.OnDateSetListener() {
             public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {

                        if (year > mYear)
                        view.updateDate(mYear, mMonth, mDay);

                        if (monthOfYear > mMonth && year == mYear)
                        view.updateDate(mYear, mMonth, mDay);

                        if (dayOfMonth > mDay && year == mYear && monthOfYear == mMonth)
                        view.updateDate(mYear, mMonth, mDay);
             }
     };

谢谢。

最佳答案

@Override
     protected Dialog onCreateDialog(int id) {
             switch (id) {
             case DATE_DIALOG_ID:
                     DatePickerDialog _date =  new DatePickerDialog(this,  mDateSetListener,
                             mYear, mMonth, mDay){
                @Override
                public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth)
                {   
                     if (year > mYear)
                        view.updateDate(mYear, mMonth, mDay);

                        if (monthOfYear > mMonth && year == mYear)
                        view.updateDate(mYear, mMonth, mDay);

                        if (dayOfMonth > mDay && year == mYear && monthOfYear == mMonth)
                        view.updateDate(mYear, mMonth, mDay);

                }
            };
            return _date;
     }
     }

您必须使用上面的 oncreate 对话框来限制 future 的日期

private DatePickerDialog.OnDateSetListener mDateSetListener =
        new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, 
                int monthOfYear, int dayOfMonth) {
                      //do your stuff when user clicks on set button in dialog  
        }
    };

关于android datepickerDialog 不应该接受 future 的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10329236/

相关文章:

android - 如何在 Android 中禁用 WIFI 自动连接

java - 更新 UI 时接收多个 UDP 数据包

android - 如何查看磨损应用程序的 CRASHES 和 ANRS

c - 获取日期和时间(以毫秒为单位)

javascript - 减去日期时间值

java - 使用JodaTime将UTC转换为以毫秒为单位的本地时间

android - 只有在重新打开应用程序后,Realm 才创建插入的对象

android - 如何从 Android 中的 PreferenceScreen 填充数据?

Excel - 日期范围包括一天中的给定时间(更好的方法)

Python datetime.time 和算术运算