DatePickerDialog 的 getDatePicker().setMinDate 不起作用

getDatePicker().setMinDate of DatePickerDialog does not work

我希望 DatePickerDialog 不显示当前日期之前的日期。我正在使用 setMinDate(long l) 方法。但它不起作用。

我使用内部 class 设置 minDate:

public static class DatePickerFragment extends DialogFragment
        implements DatePickerDialog.OnDateSetListener {
    DatePickerDialog datePickerDialog;

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current date as the default date in the picker
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);
        int hour = c.get(Calendar.HOUR_OF_DAY);
        int minute = c.get(Calendar.MINUTE);

        String s = month + day + year+"";
        datePickerDialog = new DatePickerDialog(getActivity(),this,year,month,day);
        datePickerDialog.getDatePicker().setMinDate(Long.parseLong(s));

        // Create a new instance of DatePickerDialog and return it
            return  datePickerDialog;
    }

    public void onDateSet(DatePicker view, int year, int month, int day) {
        SelectedDateView.setText(day+ (month + 1) + "-"  + "-" + year);

    }
}

这是显示它的方法:

public void showDatePickerDialog(View v) {
    DialogFragment newFragment = new DatePickerFragment();
    newFragment.show(getActivity().getSupportFragmentManager(), "datePicker");
}

试试这个:

long time= System.currentTimeMillis();
datePickerDialog.getDatePicker().setMinDate(time);

setMinDate() 需要 unix 时间(自 1970 年 1 月 1 日以来的毫秒数 00:00:00)。尝试这样的事情:

long currentTime = new Date().getTime();
datePickerDialog.getDatePicker().setMinDate(currentTime);

希望对您有所帮助。

对于早于 23 的 sdk,您必须使用 "System.currentTimeMillis()" 而不是 "cal.getTimeInMillis()"。

sdk < 23: datePickerStart.getDatePicker().setMinDate(System.currentTimeMillis())
sdk > 23: datePickerStart.getDatePicker().setMinDate(cal.getTimeInMillis())