SuperCalendar
SuperCalendar copied to clipboard
每次翻页调用refreshCalendar()方法,向左或向右滑动两次日期将更新错误。
这个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);
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();
}`
楼上这两个方法并没有解决我的问题,切换月份还是有问题