ドキュメントDatePickerDialog
で行われているように、を作成しています。ただし、のタイトル(つまり、今日の場合は「2012年12月」)は、年がsに設定されてもすぐには変更されないことに気づいています。週が正しく変更されていることがわかります。適切な日付(月、月日、年、週日)を使用して、コールバックに基づいてダイアログのタイトルを設定できます。さらに、 sで月が変更された場合、はすぐに更新されます。これには、月が変更される前に年が変更された場合に、選択された年が正しく表示されることが含まれます。また、を他の月にスクロールすると、正しい年が表示されるように年も調整されます。CalendarView
Spinner
onSelectedDayChange
Spinner
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;
}