Android. Выбор даты (счетчик) не отображается должным образом - PullRequest
0 голосов
/ 04 июля 2018

Я инициализирую свой инструмент выбора даты следующим образом:

    if (question.getAnswers().size() > 0) {
        EBotAnswer ans = question.getAnswers().get(0);

        try {
            if (ans.hasMinDate()) {
                picker.setMinDate(ans.getMinDateInLocalDate().getTimeInMillis());
            }
        } catch (IllegalArgumentException e) {
        }
        try {
            if (ans.hasMaxDate()) {
                picker.setMaxDate(ans.getMaxDateInLocalDate().getTimeInMillis());
            }
        } catch (IllegalArgumentException e) {
        }

        Calendar startWithDate = null;
        if (ans.hasStartWithDate()) {
            startWithDate = ans.getStartWithDateInLocalDate();
        } else if (ans.defaultCalendarDateMin()) {
            startWithDate = ans.getMinDateInLocalDate();
        } else if (ans.defaultCalendarDateMax()) {
            startWithDate = ans.getMaxDateInLocalDate();
        } else if (ans.defaultCalendarDateStartWith()) {//This is somewhat redundant
            startWithDate = ans.getStartWithDateInLocalDate();
        }
        if (startWithDate != null) {
            picker.updateDate(
                    startWithDate.get(Calendar.YEAR),
                    startWithDate.get(Calendar.MONTH),
                    startWithDate.get(Calendar.DAY_OF_MONTH));
        }
    }

Но изначально раскладка выглядит так:

enter image description here

Если я начну крутить счетчик, появится 8 июля. enter image description here

Любые идеи о том, почему это происходит?!

Я пытался позвонить picker.invalidate() или picker.requestLayout(), или даже picker.requestFocus(), но, похоже, ничего не работает.

1 Ответ

0 голосов
/ 04 июля 2018

Проверьте значение startWithDate.get(Calendar.DAY_OF_MONTH). Может не подходить для случаев, которые вы применили к DatePicker, например, максимальный диапазон.

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

if (startWithDate != null
        && (startWithDate.getTimeInMillis() < picker.getMaxDate())
        && (startWithDate.getTimeInMillis() > picker.getMinDate())) {
    picker.updateDate(
            startWithDate.get(Calendar.YEAR),
            startWithDate.get(Calendar.MONTH),
            startWithDate.get(Calendar.DAY_OF_MONTH));
} else {
    // In case of invalid date set it to minimum
    startWithDate.setTimeInMillis(picker.getMinDate());
    // Or if you want to set it to maximum
    // startWithDate.setTimeInMillis(picker.getMaxDate());
    picker.updateDate(
            startWithDate.get(Calendar.YEAR),
            startWithDate.get(Calendar.MONTH),
            startWithDate.get(Calendar.DAY_OF_MONTH));
}
...