0

我试图在单击某个 TextView 时创建一个 DatePickerDialog,然后将选择的日期设置为该 TextView。我已经让它工作了,但是当显示 DatePickerDialog 时,左侧 DatePicker 的日期正确设置为当前日期,而右侧的日历设置为 2100 年 11 月。如何访问日历字段并设置其日期?

这是我正在谈论的图像的链接,但并非完全来自我的应用程序。 http://i1023.photobucket.com/albums/af358/shaikhhamadali/typesofdialog_4_zps078711ac.png

所以,我说的是右边的日历不是从当前日期开始的。我想知道如何访问它?如果我没记错的话,这个日历只会显示在平板电脑上,那么有没有一种“安全”的方式来做到这一点,在手机上运行它不会造成任何问题?

这是我的 DatePickerFragment 内部类 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--我想它应该利用四舍五入来产生“完整”的一天。如果当前时间在中午之后,请注意它四舍五入到同一天,如果之前则为前一天。它不是在浮点数之后斩波。

关于更新部分:即使调用setMinDatethensetDate 也不能真正解决任何问题——导致 Nov 2100 错误的问题将持续存在,因为更新行的效果是由原始代码执行的。

然后我环顾四周,找到了上面链接的答案。我猜 CalendarView 充满了错误。

似乎还有另一个 NumberPicker 错误,其中上个月和日期有时会显示,即使无法访问。当我们尝试访问它们时它们会消失。

PS:我知道这已经晚了,但是由于 OP 没有提供任何解决方案,因此分析可能对某人有所帮助。

于 2014-06-12T14:55:23.800 回答