【问题标题】:Setting the time for both DatePicker fields in a DatePickerDialog为 DatePickerDialog 中的两个 DatePicker 字段设置时间
【发布时间】:2014-05-14 19:48:24
【问题描述】:

我试图在单击某个 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);

【问题讨论】:

    标签: android user-interface datepicker android-calendar datepickerdialog


    【解决方案1】:

    解决方案

    This long answer(关于几乎相同的错误的问题)建议了解决此问题的方法。

    这里引用了部分内容:

    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 错误,其中上个月和日期有时会显示,即使无法访问。当我们尝试访问它们时,它们就会消失。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多