无法获取DatePicker选择当前日期,保持上一个日期已启用

时间:2017-05-05 09:11:41

标签: android date datepicker

我正在使用datepicker片段显示一个日期选择器。我用我之前选择的日期初始化我的日期选择器。

在使用上一个日期加载datepicker时,我无法从datepicker中选择当前日期。我只在API Level 21中遇到此问题。它适用于所有API级别,需要API 21.

每当我从datepicker中删除maxDate()时,它就开始运作了。但在我的情况下,我需要禁用未来的日期。

我不明白我的代码有什么问题。

这是我的代码。

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {

    public DatePickerFragment() {
    }

    private String selectedDate = "";
    private Interfaces.OnDateSelectedClickListener onDateSelectedClickListener;

    public DatePickerFragment(Interfaces.OnDateSelectedClickListener onDateSelectedClickListener, String selectedDate) {
        this.onDateSelectedClickListener = onDateSelectedClickListener;
        this.selectedDate = selectedDate;

    }

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Calendar calendar = Calendar.getInstance();
        int year = 0, month = 0, day = 0;

        if (StaticUtils.isTextEmpty(selectedDate)) {
            year = calendar.get(Calendar.YEAR);
            month = calendar.get(Calendar.MONTH);
            day = calendar.get(Calendar.DAY_OF_MONTH);
        } else {
            try {
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yyyy", Locale.getDefault());
                Date date = simpleDateFormat.parse(selectedDate);
                calendar.setTimeInMillis(date.getTime());
                year = calendar.get(Calendar.YEAR);
                month = calendar.get(Calendar.MONTH);
                day = calendar.get(Calendar.DAY_OF_MONTH);
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }

        DatePickerDialog datePicker;
        if (Build.VERSION.SDK_INT < 21) {
            datePicker = new DatePickerDialog(getActivity(), AlertDialog.THEME_HOLO_LIGHT, this, year, month, day);
        } else {
            datePicker = new DatePickerDialog(getActivity(), R.style.datepicker, this, year, month, day);
        }

        datePicker.getDatePicker().setMaxDate(System.currentTimeMillis()); // disable future dates
        datePicker.setTitle("");
        datePicker.setCustomTitle(null);
        return datePicker;
    }

    public void onDateSet(DatePicker view, int year, int month, int day) {
        if (onDateSelectedClickListener != null) {
            onDateSelectedClickListener.onDateSelect(StaticUtils.getDateTimeFromCalendar(day, month, year));
        }
    }
}

更新:

应用@Lalchand代码后,如果我已将日历加载到上一个日期,则可以选择当前日期,但仍然在API级别21中,它无效。谁能帮我?或者给我一些改进我的代码的建议。

3 个答案:

答案 0 :(得分:3)

经过几次研究后,我才知道系统将不允许我选择当前日期,因为我设置了最长日期。因此,要允许我的用户选择我更改的当前日期

datePicker.getDatePicker().setMaxDate(System.currentTimeMillis());

datePicker.getDatePicker().setMaxDate(System.currentTimeMillis() + (1000 * 60 * 60));

通过应用上述工作,我可以选择当前日期,并将日历加载到上一个日期。

答案 1 :(得分:0)

我认为以下链接会为您提供答案:

Able to choose date even after setMaxDate

因此,在用户选择日期后,如果用户选择了错误的日期,请向用户发出警告或提示信息。

找到解决方案:按照此链接中的提及使用库

setMaxDate() not working perfectly in lollipop

答案 2 :(得分:-1)

datePicker.getDatePicker().setMaxDate((maxDate + 1).getTime() - 1)

我想他们写的代码如下:

if (getCurrentTimeInMillis() > getMaxDate().getTimeInMillis()) {
    // you can't select the future time
    return;
}

修正错误后,应该如下所示:

if (getCurrentDate() > getMaxDate()) {
    // you can't select the future time
    return;
}

很明显,您可以通过将其设置为当天的最大timeInmillis来解决此问题