How to go to a selected date in Material Calendar View?

旧街凉风 提交于 2019-12-25 04:28:08

问题


I'm using material-calendarview in my project. I can change the selection of the date using setSelectedDate() method. I've a button as "Today selection".My intention is to move the views to current date by clicking this button.There are methods goToNext() and goToPrevious() which only changes one month.But if it is two or more month forward or backward,then how should i change the view to selected date or current date.I tried using invalidate() but nothing happens.


回答1:


For those people who are having a hard time on this one, update your gradle to :

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

there is a function :

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

no more computation, pager directs to selected date. kudos.




回答2:


I did something similar to @Patriotic but was able to do it off current state of calendar rather than a listener and counter.

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();
        }
    }
}



回答3:


I've handled this issue somehow so, i thought i should share it with community.

  • Global counter variable to keep track of month.

    private int counter;

  • setOnMonthChangedListener() to listen the month

  • Compare date with current date.

    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;
            }
        }
    });
    
  • When Button triggered, checked the counter and changed the view to current date using goToNext() and goToPrevious() method.

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

    counter=0;




回答4:


All answers not do what is needed the solution is:

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

this will prevent old date from selection but currently it sits it to unvisible .. i am working on just set it to gray




回答5:


First find material calendar view after using this:

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


来源:https://stackoverflow.com/questions/41456628/how-to-go-to-a-selected-date-in-material-calendar-view

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!