Отключить прошлую дату в DatePickerDialog

Я хочу добавить код .getDatePicker().setMinDate(newDate.getTime() - (newDate.getTime()%(24*60*60*1000)))для отключения прошлой даты, но вдруг .show() нельзя использовать.

Может ли кто-нибудь научить меня, как решить такую ​​​​проблему?

Код:

btnDate.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            selectDate();
                        }
                    });

private void selectDate()
{
    DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
            calendar.set(Calendar.YEAR, year);
            calendar.set(Calendar.MONTH, month);
            calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);

            String selectedDate = dateFormat.format(calendar.getTime());

            btnDate.setText(selectedDate);
            btnDate.setTextColor(getResources().getColor(colorPrimaryDark));
        }
    };

    Date newDate = calendar.getTime();

    new DatePickerDialog(TutorAddNewTimeSlotActivity.this,  dateSetListener,
            calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)).show();
}

person Joseph    schedule 18.02.2020    source источник
comment
Отвечает ли это на ваш вопрос? Как отключить прошлые даты в средстве выбора даты Android?   -  person Ali    schedule 18.02.2020
comment
@Ali Нет, потому что я хочу сделать это в своей форме.....   -  person Joseph    schedule 18.02.2020


Ответы (3)


Прежде всего объявите следующее:

private Calendar myCalendar = Calendar.getInstance();

тогда как ваш код: -

DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() {
    @Override
    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.MONTH, month);
        calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);

        String selectedDate = dateFormat.format(calendar.getTime());

        btnDate.setText(selectedDate);
        btnDate.setTextColor(getResources().getColor(colorPrimaryDark));
    }
};

внесите это изменение в свой код вместо последних двух строк:

`Date newDate = calendar.getTime();

new DatePickerDialog(TutorAddNewTimeSlotActivity.this,  dateSetListener,
        calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)).show();`

измените его и сделайте так:

datePickerDialog.getDatePicker().setMinDate(myCalendar.getTimeInMillis()); datePickerDialog.show();

который отключит прошлую дату.

person Twisha Kotecha    schedule 18.02.2020
comment
Я хочу, чтобы мои пользователи выбирали даты следующего месяца, поэтому мой вопрос: как отключить текущий месяц в диалоговом окне выбора даты? - person MaKi; 24.06.2021

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

private void selectDate()
{
    DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
            calendar.set(Calendar.YEAR, year);
            calendar.set(Calendar.MONTH, month);
            calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);

            String selectedDate = dateFormat.format(calendar.getTime());

            btnDate.setText(selectedDate);
            btnDate.setTextColor(getResources().getColor(colorPrimaryDark));
        }
    };

    Date newDate = calendar.getTime();

DatePickerDialog dialog= new DatePickerDialog(this,  dateSetListener,
                calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)).show();
dialog.getDatePicker().setMinDate(Calendar.getInstance().getTimeInMillis());
        dialog.show();
}
person Ajeett    schedule 18.02.2020

Вы можете просто сделать это так

datePickerDialog.datePicker.minDate=Date().time

Вы можете создать свой собственный класс выбора даты, унаследовав класс по умолчанию, и определить минимальную дату, как показано ниже.

class DatePicker(var onDateSetListener: DatePickerDialog.OnDateSetListener): DialogFragment() {
var date: Date? = null

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
    val c = Calendar.getInstance()
    val year = c.get(Calendar.YEAR)
    val month = c.get(Calendar.MONTH)
    val day = c.get(Calendar.DAY_OF_MONTH)
    val datePickerDialog= DatePickerDialog(activity!!,onDateSetListener, year, month, day)
    datePickerDialog.datePicker.minDate=Date().time
    return datePickerDialog
}

}

person Vivek Mishra    schedule 18.02.2020
comment
Не могли бы вы сказать мне, где мне нужно добавить код, который вы предоставляете? - person Joseph; 18.02.2020
comment
@Joseph добавил полный класс для справки - person Vivek Mishra; 18.02.2020