【问题标题】:Java Android CalendarView selectedDateChanged not updatingJava Android CalendarView selectedDateChanged 未更新
【发布时间】:2017-03-03 22:20:56
【问题描述】:

我有一个 CalendarView,它允许用户选择日期并输入活动。

我有一个方法,每当所选日期更改时调用如下:

private void selectedDateChanged(CalendarView view, int year, int month, int dayOfMonth){
        //note: _Calendar is set to the view when activity loads hence the
        //the reason for not using view.getDate();
        Long timeSinceEpoch = _Calendar.getDate();

        GregorianCalendar calendar = new GregorianCalendar();
        calendar.setTimeInMillis(timeSinceEpoch);

        System.out.println(String.format("With gregorian calendar \n Day: %s \n Month: %s \n Year: %s",
                calendar.DAY_OF_MONTH, calendar.MONTH, calendar.YEAR));

    }

每次选择的日期更改时都会调用该方法,问题是每次调用该方法时 GregorianCalendar 都不会更新。每当我选择新的一天时,

I/System.out: With gregorian calendar 
I/System.out:  Day: 5 
I/System.out:  Month: 2 
I/System.out:  Year: 1

打印出来并且在选择新日期时不会更新。

我不知道如何强制 GregorianCalendar 更新,CalendarView 的 javadoc 说 getDate() 应该以毫秒为单位返回当前选择的日期,因为 unix epoch

【问题讨论】:

  • 为什么不使用传递的参数yearmonthdayOfMonth
  • @petey 我需要从其他没有这些参数的方法中获取日期。这只是一个方便的测试场所

标签: java android gregorian-calendar calendarview


【解决方案1】:
System.out.println(String.format("With gregorian calendar \n Day: %s \n Month: %s \n Year: %s",
            dayOfMonth, month, year));

【讨论】:

  • 我故意不使用这些参数,因为我需要能够从只能访问 CalendarView 的其他方法获取日、月和年
【解决方案2】:

事实证明Calendar.DAY_OF_MONTHCalendar.MONTHCALENDAR.YEAR 不是包含该信息的字段,而是表示您在调用Calendar.get(); 时要查找的整数

所以解决这个问题相当简单,我了解到正确的代码是:

private void selectedDateChanged(CalendarView view, int year, int month, int dayOfMonth){
        //note: _Calendar is set to the view when activity loads hence the
        //the reason for not using view.getDate();
        Long timeSinceEpoch = _Calendar.getDate();

        GregorianCalendar calendar = new GregorianCalendar();
        calendar.setTimeInMillis(timeSinceEpoch);

        //Notice instead of calling cal.DAY_OF_MONTH directly
        //I now call calendar.get(Calendar.DAY_OF_MONTH)
        System.out.println(String.format("With gregorian calendar \n Day: %s \n Month: %s \n Year: %s",
                calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.MONTH), calendar.get(Calendar.YEAR)));

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多