如何在物料日历视图中转到选定日期?

时间:2017-01-04 05:14:36

标签: android calendarview

我在我的项目中使用material-calendarview。我可以使用setSelectedDate()方法更改日期的选择。我有一个按钮作为“今日选择”。我的意图是通过点击此按钮将视图移动到当前日期。有方法goToNext()和goToPrevious()只改变一个月。但如果是两个月或更多月向前或向后,然后我应该如何将视图更改为选定的日期或当前日期。我尝试使用invalidate()但没有任何反应。

6 个答案:

答案 0 :(得分:1)

对于那些在这个问题上遇到困难的人, 将您的gradle更新为:

compile 'com.prolificinteractive:material-calendarview:1.4.2'

有一个功能:

calendarView.setCurrentDate(CalendarDay.from(year, month, day), true);

不再计算,寻呼机指向所选日期。荣誉。

答案 1 :(得分:1)

我做了类似于@Patriotic的事情但是能够从当前的日历状态而不是听众和计数器上做到这一点。

private void selectDate(Date date) {
    Calendar startCalendar = new GregorianCalendar();
    startCalendar.setTime(date);
    Calendar endCalendar = calendarView.getCurrentDate().getCalendar();

    calendarView.setSelectedDate(date);

    int diffYear = endCalendar.get(Calendar.YEAR) - startCalendar.get(Calendar.YEAR);
    int diffMonth = diffYear * 12 + endCalendar.get(Calendar.MONTH) - startCalendar.get(Calendar.MONTH);
    int monthsToMove = Math.abs(diffMonth);
    for (int i = 0; i < monthsToMove; i++) {
        if (diffMonth < 0) {
            calendarView.goToNext();
        } else if (diffMonth > 0) {
            calendarView.goToPrevious();
        }
    }
}

答案 2 :(得分:0)

我已经以某种方式解决了这个问题,我想我应该与社区分享。

  • 用于跟踪月份的全局计数器变量。

    private int counter;

  • setOnMonthChangedListener()收听月份

  • 将日期与当前日期进行比较。

    final Calendar currentCal=Calendar.getInstance();
    currentCal.set(Calendar.DATE,1);
    
    calendarView.setOnMonthChangedListener(new OnMonthChangedListener() {
        @Override
        public void onMonthChanged(MaterialCalendarView widget, CalendarDay date) {
            if(date.getYear()==currentCal.get(Calendar.YEAR)){
                if(date.getMonth()<currentCal.get(Calendar.MONTH)){
                    --counter;
                }else if(date.getMonth()>currentCal.get(Calendar.MONTH)){
                    ++counter;
                }
            }else if(date.getYear()<currentCal.get(Calendar.YEAR)){
                --counter;
            }else if(date.getYear()>currentCal.get(Calendar.YEAR)){
                ++counter;
            }
        }
    });
    
  • 当按钮被触发时,检查计数器并使用goToNext()和goToPrevious()方法将视图更改为当前日期。

    int c=Math.abs(counter);
    for (int i = 0; i <c ; i++) {
        if(counter<0){
            calendarView.goToNext();
        }else if(counter>0){
            calendarView.goToPrevious();
        }
    }
    

    计数器= 0;

答案 3 :(得分:0)

所有答案都无法满足需要 解决方案是:

 val current = calendar.time
    calendarMaterial!!.selectionMode = SELECTION_MODE_RANGE
    calendarMaterial!!.setCurrentDate(CalendarDay.from(current),true)
    calendarMaterial!!.state().edit()
                .setMinimumDate(current)
                .commit()

这将防止选择旧日期,但目前它使它不可见..我正在将其设置为灰色

答案 4 :(得分:0)

//this is default
calendarMonth.currentDate = CalendarDay.today()

//ok?
calendarMonth.selectedDate = CalendarDay.today()

答案 5 :(得分:-1)

使用此功能后首先找到材料日历视图:

calendarView = (MaterialCalendarView)findViewById(R.id.calendarView);
calendarView.setSelectionMode(MaterialCalendarView.SELECTION_MODE_MULTIPLE);