【问题标题】:Setting upper and lower date limits to date picker dialog设置日期选择器对话框的日期上限和下限
【发布时间】:2013-04-16 05:23:49
【问题描述】:

我创建了一个活动,其中有一个用于插入用户出生日期的字段。我已经使用日期选择器来实现这一点。

这是我正在做的事情的源代码:

// onclick dob edittext open date picker dialog
        dob.setFocusableInTouchMode(false);
        dob.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                //open date picker
                  showDialog(DATE_DIALOG_ID);

            }
        }); 


//======================For picking birth day==========================
    // Creating dialog
        @Override
        protected Dialog onCreateDialog(int id) {
            Calendar c = Calendar.getInstance();
            int cyear = c.get(Calendar.YEAR);
            int cmonth = c.get(Calendar.MONTH);
            int cday = c.get(Calendar.DAY_OF_MONTH);


            switch (id) {
                case DATE_DIALOG_ID:
                    return new DatePickerDialog(this, mDateSetListener, cyear, cmonth, cday);
            }
            return null;
        }
        private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {
            // onDateSet method
            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
//              String date_selected = String.valueOf(monthOfYear+1)+" /"
//                                    +String.valueOf(dayOfMonth)+" /"
//                                    +String.valueOf(year);

                String date_selected = String.valueOf(dayOfMonth)+" /"
                        +String.valueOf(monthOfYear+1)+" /"
                        +String.valueOf(year);
                //Toast.makeText(RegisterActivity.this, "Selected Date is ="+date_selected, Toast.LENGTH_SHORT).show();
                dob.setText(date_selected);
            }
        };
//======================For picking birth day==========================

现在我想做的是,将日期选择器限制为特定年份。 像这样:

int maxYear = c.get(Calendar.YEAR) - 15; // this year ( 2013 ) - 15 = 1998
                int maxMonth = c.get(Calendar.MONTH);
                int maxDay = c.get(Calendar.DAY_OF_MONTH);

                int minYear = maxYear-49;
                int minMonth = 0; // january
                int minDay = 25; 

我应该怎么做才能将上述边界设置为日期选择器?

//----------------编辑------------------------- --

我做过这样的事情:

//======================For picking birth day==========================
    // Creating dialog
        @Override
        protected Dialog onCreateDialog(int id) {
            Calendar c = Calendar.getInstance();
            maxYear = c.get(Calendar.YEAR) - 15; // this year ( 2013 ) - 15 = 1998
            maxMonth = c.get(Calendar.MONTH);
            maxDay = c.get(Calendar.DAY_OF_MONTH);




            switch (id) {
                case DATE_DIALOG_ID:
                    return new DatePickerDialog(this, mDateSetListener, maxYear, maxMonth, maxDay);
            }
            return null;
        }


        DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {



                int minYear = maxYear-49;
                int minMonth = 0; // january
                int minDay = 25;

            public void onDateChanged(DatePicker view, int year, int monthOfYear,int dayOfMonth) {

                Date current = new Date(year, monthOfYear, dayOfMonth);

                Date minDate = new Date(minYear, minMonth, minDay);
                Date maxDate = new Date(maxYear, maxMonth, maxDay);
                if( current.getTime() < minDate.getTime() )
                {
                    //set to minimum date
                }else if( current.getTime() > maxDate.getTime() )
                {
                    //Set to max Date
                }

            }

            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear,
                    int dayOfMonth) {
                // TODO Auto-generated method stub
                 String date_selected = String.valueOf(dayOfMonth)+" /"
                            +String.valueOf(monthOfYear+1)+" /"
                            +String.valueOf(year);
                    //Toast.makeText(RegisterActivity.this, "Selected Date is ="+date_selected, Toast.LENGTH_SHORT).show();
                    dob.setText(date_selected);

            }
        };
//======================For picking birth day==========================

这是固定上限,但下限或 minDate 没有得到固定!要做什么?

【问题讨论】:

    标签: java android datepicker limit


    【解决方案1】:

    设置OnDateChangedListener()为你DatePicker和内部onDateChanged函数如果日期设置大于决定限制如果是DatePicker.updateDate(minYear, minMonth, minDay);使用这个方法重置它。

    Date minDate = new Date(1990, 10, 25);
    Date maxDate = new Date(2013, 4, 15);
    
    
    
    OnDateChangedListener listener = new OnDateChangedListener() {
    
        @Override
        public void onDateChanged(DatePicker view, int year, int monthOfYear,
                int dayOfMonth) {
    
            Date current = new Date(year, monthOfYear, dayOfMonth);
    
            if( current.getTime() < minDate.getTime() )
            {
                //set to minimum date
            }else if( current.getTime() > maxDate.getTime() )
            {
                //Set to max Date
            }
    
        }
    };
    YourDatePicker.init(2013, 4, 15, listener);
    

    【讨论】:

    • 你能详细解释一下吗?
    • @kittu88 你还想让 RajeshCP 到你的电脑上为你写代码吗?
    • @LuiggiMendoza 不,我不是那个意思,我想知道将 public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) 放在哪里以及如何处理 public void onDateSet( DatePicker 视图, int year, int monthOfYear, int dayOfMonth)
    • 现在这将是我可以为您提供的最大值....我还没有测试过代码,但希望这会有所帮助
    • @RajeshCP 如果您不介意,请检查我的问题的编辑!
    猜你喜欢
    • 2015-09-12
    • 1970-01-01
    • 2012-09-09
    • 2016-11-05
    • 2018-09-28
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多