the documentation처럼 완료되는 DatePickerDialog
을 생성 중입니다. 그러나 CalendarView
의 제목 (즉, 오늘의 12 월 2012)은 Spinner
초로 설정하면 즉시 변경되지 않습니다. 나는 주가 올바르게 바뀌 었음을 알았고 적절한 날짜 (월, 달, 일, 주, 일)로 된 onSelectedDayChange
콜백을 기반으로 대화창에 제목을 설정할 수 있습니다. 또한 Spinner
에서 월이 변경되면 즉시 CalendarView
이 업데이트됩니다. 이는 월이 변경되기 전에 연도가 변경된 경우 올바르게 선택한 연도를 표시하는 것을 포함합니다. CalendarView
을 다른 달로 스크롤하면 연도도 올바른 연도로 조정됩니다.Android DatePickerDialog CalendarView의 제목 불일치
이것은 CalendarView
이 날짜가 설정 될 때 단순히 제목 (아마 최적화?)을 다시 그리지 않는다는 것을 의미하는 것으로 보입니다. 내가 뭔가 잘못하고 있는거야? 이것에 대한 해결책이 있습니까? 아니면 구현의 버그입니까? 여기
DialogFragment
을 대신
DatePicker
에
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;
}