MagicMashRoom / SuperCalendar

@Deprecated android 自定义日历控件 支持左右无限滑动 周月切换 标记日期显示 自定义显示效果跳转到指定日期
2.76k stars 484 forks source link

每次翻页调用refreshCalendar()方法,向左或向右滑动两次日期将更新错误。 #148

Open XBYoung opened 6 years ago

fengfutong commented 6 years ago

这个bug我也发现了,然后我将CalendarRenderer.java 文件中的fillCurrentMonthDate()方法做了修改如下:用来确保selectedRowIndex得到正确刷新。

 private void fillCurrentMonthDate(int day, int row, int col) {
        CalendarDate date = seedDate.modifyDay(day);
        if (weeks[row] == null) {
            weeks[row] = new Week(row);
        }
        if (weeks[row].days[col] != null) {
            if (date.equals(CalendarViewAdapter.loadSelectedDate())) {

                weeks[row].days[col].setDate(date);
                weeks[row].days[col].setState(State.SELECT);
                selectedRowIndex = row;
            } else {
                weeks[row].days[col].setDate(date);
                weeks[row].days[col].setState(State.CURRENT_MONTH);
                if (date.equals(seedDate)) {
                    selectedRowIndex = row;
                }
            }

        } else {
            if (date.equals(CalendarViewAdapter.loadSelectedDate())) {

                weeks[row].days[col] = new Day(State.SELECT, date, row, col);
                selectedRowIndex = row;

            } else {

                weeks[row].days[col] = new Day(State.CURRENT_MONTH, date, row, col);
                if (date.equals(seedDate)) {
                    selectedRowIndex = row;
                }
            }
        }
    }

并且在CalendarViewAdapter.java中的switchToWeek()中将v1.updateWeek进行了注释。

    Calendar v1 = calendars.get(currentPosition % 3);
            v1.switchCalendarType(CalendarAttr.CalendarType.WEEK);
            v1.showDate(seedDate);
//            v1.updateWeek(rowIndex);
extfff commented 6 years ago

hi 朋友 这个问题我也遇见到了 主要引起的原因是 作者在刷新的时候没有计算CalendarViewAdapter的值我的解决方案是 重新计算一次值即可(不过会引起点击问题 思路就是这个)

`public void notifyDataChanged(CalendarDate date) { seedDate = date; // 计算月份差 然后计算出currentPosition的值 int month = (mFirstDate.year - date.year) * 12 + (mFirstDate.month - date.month); currentPosition = MonthPager.DEFUALT_DAY_INDEX - month;

    saveSelectedDate(date);
    refreshCalendar();
}`
CatEatFishs commented 5 years ago

楼上这两个方法并没有解决我的问题,切换月份还是有问题