From fe47b9da030a6bf8ac3a2964b37a48105831db5a Mon Sep 17 00:00:00 2001 From: Kizito Nwose Date: Sun, 25 Aug 2019 14:41:02 +0100 Subject: [PATCH] Fix crash if setup is called after adapter is updated. --- .../main/java/com/kizitonwose/calendarview/CalendarView.kt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/library/src/main/java/com/kizitonwose/calendarview/CalendarView.kt b/library/src/main/java/com/kizitonwose/calendarview/CalendarView.kt index 9b35352f..ff6b06e3 100644 --- a/library/src/main/java/com/kizitonwose/calendarview/CalendarView.kt +++ b/library/src/main/java/com/kizitonwose/calendarview/CalendarView.kt @@ -405,11 +405,12 @@ open class CalendarView : RecyclerView { private fun updateAdapterMonthConfig(saveScroll: Boolean = false) { if (adapter != null) { + // Get visible month and offset to be used to restore scroll position if needed. val visiblePosition = calendarLayoutManager.findFirstVisibleItemPosition() val visibleView = calendarLayoutManager.findViewByPosition(visiblePosition) - val viewOffset = (if (isVertical) visibleView?.top else visibleView?.left) ?: 0 - val visibleMonth = calendarAdapter.monthConfig.months[visiblePosition] + val visibleViewOffset = (if (isVertical) visibleView?.top else visibleView?.left) ?: 0 + val visibleMonth = calendarAdapter.monthConfig.months.getOrNull(visiblePosition) calendarAdapter.monthConfig = MonthConfig( @@ -423,7 +424,7 @@ open class CalendarView : RecyclerView { if (saveScroll) { // Scroll to the previously visible month with offset. val visibleMonthNewPos = calendarAdapter.monthConfig.months.indexOf(visibleMonth) if (visibleMonthNewPos != NO_INDEX) { - calendarLayoutManager.scrollToPositionWithOffset(visibleMonthNewPos, viewOffset) + calendarLayoutManager.scrollToPositionWithOffset(visibleMonthNewPos, visibleViewOffset) } } calendarAdapter.notifyMonthScrollListenerIfNeeded()