Calendar icon indicating copy to clipboard operation
Calendar copied to clipboard

CalendarView scrolling to current month when navigating back to calendar

Open macro39 opened this issue 2 years ago • 1 comments

Hello, i have struggles when navigating back to my calendar view fragment.

E/WorkoutsOverviewFragmentViewModel$monthScrollListener: java.lang.RuntimeException: HAHA monthScrollListener 2022-02-01 CalendarMonth { first = CalendarDay { date =  2022-03-28, owner = PREVIOUS_MONTH}, last = CalendarDay { date =  2022-05-08, owner = NEXT_MONTH}} indexInSameMonth = 0, numberOfSameMonth = 1
        at sk.macro.befit.workout.vm.WorkoutsOverviewFragmentViewModel$monthScrollListener$1.invoke(WorkoutsOverviewFragmentViewModel.kt:225)
        at sk.macro.befit.workout.vm.WorkoutsOverviewFragmentViewModel$monthScrollListener$1.invoke(WorkoutsOverviewFragmentViewModel.kt:222)
        at com.kizitonwose.calendarview.ui.CalendarAdapter.notifyMonthScrollListenerIfNeeded(CalendarAdapter.kt:201)
        at com.kizitonwose.calendarview.ui.CalendarAdapter$onAttachedToRecyclerView$1.run(CalendarAdapter.kt:59)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:236)
        at android.app.ActivityThread.main(ActivityThread.java:7904)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:656)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967)

There is a log. Problem stand in calling month scroll from notifyMonthScrollListenerIfNeeded(CalendarAdapter.kt:201).

Here is my logic of MonthScrollListener

    override val monthScrollListener: MonthScrollListener = { month ->
        calendarHeaderText.value = "${month.month.toMonthName()} ${month.yearMonth.year}"

        val today = LocalDate.now()
        if (month.month == today.monthValue && month.year == today.year) {
            val currentSelectedDate = selectedDate.value
            // currently selected date is from current month (going back from navigation)
            if (currentSelectedDate != null && currentSelectedDate.month.value == month.month) {
                viewModelScope.launch {
                    updateDateEvent.send(currentSelectedDate)
                }
                updateAdapterForSpecificDate(currentSelectedDate)
            } else {
                selectedDate.value?.let {
                    viewModelScope.launch {
                        updateDateEvent.send(it)
                    }
                    workoutItems.value = emptyList()
                }
                selectedDate.value = today

                viewModelScope.launch {
                    updateDateEvent.send(today)
                }
            }
        } else {
            selectedDate.value?.let {
                // Clear selection if we scroll to a new month.
                selectedDate.value = null
                viewModelScope.launch {
                    updateDateEvent.send(it)
                }
                workoutItems.value = emptyList()
            }
        }
    }

@kizitonwose Can you help me to find proper way to handle back pressed?

macro39 avatar Apr 05 '22 11:04 macro39

The exception in the log is not clear. It just says java.lang.RuntimeException: HAHA .... ?

kizitonwose avatar May 28 '22 11:05 kizitonwose