【问题标题】:Disable past date in DatePickerDialog在 DatePickerDialog 中禁用过去的日期
【发布时间】:2020-02-18 09:03:55
【问题描述】:

我想添加代码.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();
}

【问题讨论】:

标签: java android android-studio datepickerdialog


【解决方案1】:

首先声明如下:

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();

这将禁用过去的日期。

【讨论】:

  • 我希望我的用户选择下个月的日期,所以我的问题是如何在 datepickerdialog 中禁用当前月份?
【解决方案2】:

您可以像这样转换您的方法以设置最短日期

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();
}

【讨论】:

    【解决方案3】:

    你可以这样做

    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
    }
    

    }

    【讨论】:

    • 你能告诉我我需要在哪里添加你提供的代码吗?
    • @Joseph 添加完整类供参考
    猜你喜欢
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    相关资源
    最近更新 更多