2

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

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

他に答えが出てこないので、この問題を回避するには、を有効にせずCalendarView、代わりに数値の日付ピッカーと個別DatePickerのカスタムを作成しました(実際には、実際のディスプレイとオットーイベントバスの微調整を許可します)。そうすれば、数値の日付ピッカーが設定されるたびにが設定されていることを確認できます。DialogFragmentCalendarViewCalendarViewCalendarView

于 2013-01-17T16:43:18.843 に答える