カレンダー ビューを作成しています。次の月のボタンを押したときに mCalendarContainerLL.invalidate(); を呼び出しますが、カスタム ビューは再描画されませんでした。カスタム ビューの onDraw メソッドは呼び出されませんでした。
Ps:すべてのカレンダー セル ビューを直接無効にすると、機能します。どうしてこうなった???
コードは次のとおりです。
private CalendarWidgetDayCell updateCalendarView() {
CalendarWidgetDayCell dayCellSelected = null;
boolean isSelected = false;
final boolean isHasSelection = (mCalendarSelected.getTimeInMillis() != 0);
final int selectedYear = mCalendarSelected.get(Calendar.YEAR);
final int selectedMonth = mCalendarSelected.get(Calendar.MONTH);
final int selectedDay = mCalendarSelected.get(Calendar.DAY_OF_MONTH);
Calendar dateXOfCalendar = Calendar.getInstance();
dateXOfCalendar.setTimeInMillis(mStartDateCurrentMonth.getTimeInMillis());
Log.d(tag, "updateCalendarView cpt_func_ " + "mDayCellList.size(): " + mDayCellList.size());
for (int i = 0; i < mDayCellList.size(); i++) {
final int yearOfCellItem = dateXOfCalendar.get(Calendar.YEAR);
final int monthOfCellItem = dateXOfCalendar.get(Calendar.MONTH);
final int dayOfCellItem = dateXOfCalendar.get(Calendar.DAY_OF_MONTH);
final int dayOfWeekOfCellItem = dateXOfCalendar.get(Calendar.DAY_OF_WEEK);
CalendarWidgetDayCell dayCellItem = mDayCellList.get(i);
boolean isToday = false;
if (mCalendarToday.get(Calendar.YEAR) == yearOfCellItem) {
if (mCalendarToday.get(Calendar.MONTH) == monthOfCellItem) {
if (mCalendarToday.get(Calendar.DAY_OF_MONTH) == dayOfCellItem) {
isToday = true;
}
}
}
// check holiday
boolean isHoliday = false;
if ((dayOfWeekOfCellItem == Calendar.SATURDAY) || (dayOfWeekOfCellItem == Calendar.SUNDAY))
isHoliday = true;
if ((monthOfCellItem == Calendar.JANUARY) && (dayOfCellItem == 1))
isHoliday = true;
isSelected = false;
if (isHasSelection) {
if ((selectedDay == dayOfCellItem) && (selectedMonth == monthOfCellItem)
&& (selectedYear == yearOfCellItem)) {
isSelected = true;
}
}
dayCellItem.setSelected(isSelected);
boolean hasRecord = false;
if (isSelected)
dayCellSelected = dayCellItem;
dayCellItem.setViewParam(yearOfCellItem, monthOfCellItem, dayOfCellItem, isToday, isHoliday,
mCurrentMonthInCalendar, hasRecord);
dayCellItem.invalidate();//It works well.
dateXOfCalendar.add(Calendar.DAY_OF_MONTH, 1);
}
// mCalendarContainerLL.invalidate();//This is not working as expected.
return dayCellSelected;
}