Я знаю, что Android CalendarView
является одним из самых сложных программ в истории человечества, но я должен использовать его, поэтому пришел сюда с просьбой.Android CalendarView: не могу установить минимальную дату и выбранную дату
мне нужно открыть CalendarView
с:
- минимальная дата, установленная на сегодняшний день;
- выбранные даты установлены на сегодняшний день.
Это, как я это делаю:
int day = 8;
int month = 2;
int year = 2015;
Calendar calendar = Calendar.getInstance();
calendar.set(year, month, day);
CalendarView calendarView = (CalendarView) findViewById(R.id.calendarView);
calendarView.setMinDate(calendar.getTimeInMillis()-2000);
calendarView.setDate(calendar.getTimeInMillis(), true, false);
fixIncredibleBugOfCalendarView(calendarView, calendar);
calendarView.setOnDateChangeListener(this);
При запуске предыдущего кода, CalendarView
:
показывает 9-го марта в качестве первого выбираемого дня, вместо того, 8-й (
DAY_OF_MONTH
начинается с 1);показывает 15 марта в качестве выбранной даты;
Так я гениально решил включить две строки, отмеченные *:
int day = 8;
int month = 2;
int year = 2015;
Calendar calendar = Calendar.getInstance();
calendar.set(year, month, day);
CalendarView calendarView = (CalendarView) findViewById(R.id.calendarView);
calendar.add(Calendar.DAY_OF_MONTH, -1); // * - subtract one day, i.e. March 7
calendarView.setMinDate(calendar.getTimeInMillis());
calendar.add(Calendar.DAY_OF_MONTH, 1); // * add one day, back to 8
calendarView.setDate(calendar.getTimeInMillis(), true, false);
fixIncredibleBugOfCalendarView(calendarView, calendar);
calendarView.setOnDateChangeListener(this);
В первой строке я удалить один день, во втором я добавить один.
С этой еще две линии, мои CalendarView
показывает:
- 7 марта, в качестве первой даты по выбору;
- 15 марта, в качестве выбранной даты.
Метод fixIncredibleBugOfCalendarView(...)
должен что-то исправить (я нашел его на SO):
private void fixIncredibleBugOfCalendarView(CalendarView cal, Calendar date) {
// Workaround for CalendarView bug relating to setMinDate():
// https://code.google.com/p/android/issues/detail?id=42750
// Set then reset the date on the calendar so that it properly
// shows today's date. The choice of 24 months is arbitrary.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
date.add(Calendar.MONTH, 24);
cal.setDate(date.getTimeInMillis(), false, true);
date.add(Calendar.MONTH, -24);
cal.setDate(date.getTimeInMillis(), false, true);
}
}
Это не должно быть так трудно, и я не думаю, что это ошибка: это более вероятно, что это моя вина , Два вопроса: Не могли бы вы так любезно рассказать мне, как:
- сообщить
CalendarView
минимальную дату, когда она должна отображаться? - есть
CalendarView
показывается какselected
что я решаю - это выбранная дата?
Приветствия
Если CalendarView не работает, почему бы не использовать [альтернативу] (https://github.com/square/android-times-square)? Существуют и другие альтернативы. – JonasCz
Спасибо. Поскольку я провел день на этом, я хотел бы узнать, может ли кто-то решить проблему: это очень простая задача. В противном случае я буду использовать альтернативы (трудно поверить, что простой выборщик, созданный Android-разработчиками, настолько ошибочен, а альтернатив нет). –
Возможно, попробуйте [этот ответ] (http://stackoverflow.com/a/20683328/4428462), возможно, вместе с методом 'fixIncredibleBugOfCalendarView'? – JonasCz