Как установить максимальные и минимальные ограничения для выбора даты?

Я использую средство выбора даты в своем приложении пару раз. Я хочу, чтобы в моем средстве выбора даты отображались даты с некоторыми ограничениями. Я использую следующий код: -

@Override
    protected Dialog onCreateDialog(int id) {
        switch(id) {
            case DATE_PICKER_DIALOG:
                datePickerDialogDateSetListener = new DatePickerDialog.OnDateSetListener() {
                    public void onDateSet(DatePicker datePicker, int selectedYear, int selectedMonth, int selectedDate) {
                        year = selectedYear;
                        month = selectedMonth;
                        date = selectedDate;

                        activitySignUpDateEditText.setText(new StringBuilder().append(date));
                        activitySignUpMonthEditText.setText(new StringBuilder().append(month + 1));
                        activitySignUpYearEditText.setText(new StringBuilder().append(year));
                    }
                };

                return new DatePickerDialog(this, datePickerDialogDateSetListener, year, month, date);

            default:
                return null;
        }
    } 

Где-то я хочу, чтобы средство выбора даты показывало максимальную дату 18 лет назад с текущей даты и где-то минимальную дату в качестве текущей даты. Я много искал, но не нашел удовлетворительного ответа. Я знаю о методах setMaxDate() и setMinDate() средства выбора даты, но когда я попытался с ним, я не смог установить выбранную дату в моем тексте редактирования. любая помощь будет ощутимой. Заранее спасибо.


person Ashish Kumar Gupta    schedule 10.05.2015    source источник


Ответы (2)


Вы можете попробовать заменить эту строку:

return new DatePickerDialog(this, pDateSetListener, pYear, pMonth, pDay);

Теми:

DatePickerDialog dpDialog = new DatePickerDialog(this, pDateSetListener, pYear, pMonth, pDay);
DatePicker datePicker = dpDialog.getDatePicker();

Calendar calendar = Calendar.getInstance();//get the current day
datePicker.setMaxDate(calendar.getTimeInMillis());//set the current day as the max date
return dpDialog;

таким же образом вы устанавливаете минимальную дату

DatePickerDialog dpDialog = new DatePickerDialog(this, pDateSetListener, pYear, pMonth, pDay);
DatePicker datePicker = dpDialog.getDatePicker();

Calendar calendar = Calendar.getInstance();//get the current day
datePicker.setMinDate(calendar.getTimeInMillis());//set the current day as the max date
return dpDialog;
person King of Masses    schedule 10.05.2015
comment
что такое pyear, pmonth и pday здесь - person Ashish Kumar Gupta; 10.05.2015
comment
я могу установить нижний предел, но не могу установить максимальный предел 18 лет назад с текущей даты. - person Ashish Kumar Gupta; 10.05.2015

Чтобы установить максимальную дату на 18 лет назад, следующий фрагмент кода выполнит эту работу:

Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
DatePickerDialog dateDialog = new DatePickerDialog(this, datePickerListener, year - 18, month, day);

//For setting minimum date as Current Date
//dateDialog.getDatePicker().setMinDate(c.getTimeInMillis ());

//For setting maximum date as 18 years back
c.set(year - 18, month, day);
dateDialog.getDatePicker().setMaxDate(c.getTimeInMillis());
return dateDialog;

Поскольку MaxDate не может быть меньше MinDate, поэтому MinDate не следует устанавливать как текущую дату, когда MaxDate устанавливается на 18 лет назад.

Надеюсь, это сработает для вас.

person Stack Overflowerrr    schedule 09.09.2015