Я создаю DatePickerDialog
, как это сделано в документации. Однако я заметил, что заголовок CalendarView
(то есть «декабрь 2012», как это было бы на сегодняшний день) не меняется сразу, когда год устанавливается в Spinner
s. Я вижу, что недели изменены правильно, и я могу установить заголовок диалога на основе обратного вызова onSelectedDayChange
с соответствующей датой (месяц, день месяца, год, день недели). Кроме того, если месяц изменяется в Spinner
s, то CalendarView
обновляется немедленно. Это включает в себя правильное отображение выбранного года, если год был изменен до того, как был изменен месяц. И если CalendarView
прокручивается до других месяцев, год также корректируется, чтобы показать правильный год.
Кажется, это означает, что CalendarView
просто не перерисовывает заголовок (вероятно, оптимизация?), когда устанавливается дата. Я делаю что-то еще не так? Есть ли этому решение? Или это ошибка в реализации?
Вот мой код:
public class DatePickerFragment extends DialogFragment
implements DatePickerDialog.OnDateSetListener {
/** Name of the date stored in a {@link Bundle} */
public static final String KEY_DATE = "key.DatePickerFragment.DATE";
@Override
public Dialog onCreateDialog(Bundle icicle) {
final Bundle arguments = getArguments();
Time date = arguments == null
? TimeMachine.getTimeFromArray(getArguments().getIntArray(KEY_DATE))
: null;
if (date == null)
date = TimeMachine.getToday();
_dialog_window = new DatePickerDialog(getActivity(), this, date.year, date.month, date.monthDay);
final CalendarView calendar_view = _dialog_window.getDatePicker().getCalendarView();
calendar_view.setOnDateChangeListener(
new CalendarView.OnDateChangeListener() {
@Override
public void onSelectedDayChange(CalendarView _, int year, int month, int day) {
updateTitle(TimeMachine.getTimeFromArray(new int[]{ year, month, day }));
}
}
);
// Sets the title
updateTitle(date);
// Create a new instance of DatePickerDialog and return it
return _dialog_window;
}
@Override
public void onDateSet(DatePicker _, int year, int month, int day) {
final Time date = new Time();
date.set(day, month, year);
}
private void updateTitle(Time date) {
_dialog_window.setTitle(date.format(" %A, %B %e, %Y"));
}
/** The Dialog window */
private DatePickerDialog _dialog_window;
}