2

我正在创建一个DatePickerDialog,就像它在文档中所做的那样。但是,我注意到CalendarView当年份设置在Spinners. 我看到周已正确更改,并且我可以根据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;
}
4

2 回答 2

1

我遇到了同样的问题并提交了错误报告:http ://code.google.com/p/android/issues/detail?id=53875

于 2013-04-07T19:36:52.030 回答
0

看到没有其他人提出任何其他答案,我通过不启用CalendarViewon解决了这个问题DatePicker,而是制作了一个DialogFragment具有数字日期选择器和单独的自定义CalendarView(实际上是我自己的基于真实的重新CalendarView实现允许调整它的显示和 Otto 事件总线)。然后我可以确保CalendarView每次设置数字日期选择器时都设置了 。

于 2013-01-17T16:43:18.843 回答