0

特定の TextView がクリックされたときに DatePickerDialog を作成し、選択した日付をその TextView に設定しようとしています。私はこれを機能させましたが、DatePickerDialog が表示されると、左側の DatePicker の日付は現在の日付に正しく設定され、右側のカレンダーは 2100 年 11 月に設定されます。カレンダーのフィールドにアクセスして設定するにはどうすればよいですか日にち?

これは私が話していることの画像へのリンクですが、私のアプリケーションからのものではありません。 http://i1023.photobucket.com/albums/af358/shaikhhamadali/typesofdialog_4_zps078711ac.png

つまり、現在の日付から開始しない右側のカレンダーについて話しているのです。アクセス方法を知りたいのですが?私が間違っていなければ、このカレンダーはタブレットでしか表示されないので、電話で実行しても問題が発生しない「安全な」方法はありますか?

これが私の DatePickerFragment innerclass onCreateDialog メソッドのコードです

 @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            // Use the current date as the default date in the picker
            final Calendar c = Calendar.getInstance();
            int year = c.get(Calendar.YEAR);
            int month = c.get(Calendar.MONTH);
            int day = c.get(Calendar.DAY_OF_MONTH);

            DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), this, year, month, day);
            datePickerDialog.setTitle("Enter date");
            datePickerDialog.getDatePicker().setMinDate(Calendar.getInstance().getTimeInMillis() / 86400000L * 86400000L);


            return datePickerDialog;
        }

助けてくれてありがとう!

アップデート:

更新: 両方から CalendarView へのアクセスを追加しようとしましたが、CalendarView はまだ 2100 年 11 月に起動します

  datePickerDialog.getDatePicker().getCalendarView().setDate(Calendar.getInstance().getTimeInMillis() / 86400000L *86400000L);

    datePickerDialog.getDatePicker().getCalendarView().setMinDate(Calendar.getInstance().getTimeInMillis() / 86400000L  86400000L);
4

1 に答える 1

0

解決

この長い回答(実質的に同じバグに関する質問) は、この問題の回避策を示唆しています。

その一部をここに引用します:

formatDateRange()2038 年以降は機能しません。

回避策 #1

class DatePickerDialog1964 extends DatePickerDialog {
    DatePickerDialog1964(Context c) {
        super(c, null, 2013, 4, 21);

        @SuppressWarnings("deprecation")
        Date min = new Date(2013-1900, 4, 21);

        DatePicker p = getDatePicker();
        CalendarView cv = p.getCalendarView(); // should check for null
        long cur = cv.getDate();
        int d = cv.getFirstDayOfWeek();
        p.setMinDate(min.getTime());
        cv.setDate(cur + 1000L*60*60*24*40);
        cv.setFirstDayOfWeek((d + 1) % 7);
        cv.setDate(cur);
        cv.setFirstDayOfWeek(d);
    }
}

回避策その2 私が実際に使った

// Calendar view is a cascade of bugs.
// Work around that by explicitly disabling it.
datePicker.setCalendarViewShown(false);

私の推理

datePickerDialog.getDatePicker().setMinDate(Calendar.getInstance().getTimeInMillis() / 86400000L * 86400000L);消去することにより、この行が 2100 年 11 月のエラーの原因であると推測できます。

(UNIX time / 86400000L) * 86400000L--丸めを利用して「丸一日」を生成することになっていると思います。現在の時刻が正午以降の場合は当日に、前の場合は前日に丸められることに注意してください。浮動小数点の後にチョッピングしていません。

setMinDate更新部分について:その後呼び出しても実際にsetDate は何も解決されません -- 更新された行の効果は元のコードによって実行されるため、Nov 2100 エラーの原因となった問題は残ります。

それから私は周りを見回しました、そして私は上記のリンクされた答えを見つけました. CalendarView にはバグが詰まっていると思います。

アクセスできない場合でも、前の月と日付が時々表示される NumberPicker の別のバグがあるようです。それらにアクセスしようとすると、それらは消えます。

PS:これが遅れていることは知っていますが、OPは解決策を提供しなかったため、分析が誰かの役に立つかもしれません.

于 2014-06-12T14:55:23.800 に答える