diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/ScheduleFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/ScheduleFragment.java index e6f9bf6..abb0cb1 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/ScheduleFragment.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/ScheduleFragment.java @@ -119,7 +119,6 @@ public class ScheduleFragment extends Fragment implements MonthLoader.MonthChang Iterator it_modEvents = mod.events.getEventsOfMonth(newYear, newMonth); while (it_modEvents.hasNext()) { Event e = it_modEvents.next(); - //log.d("Event in while", e.toString()); Calendar ende = Calendar.getInstance(); ende.setTimeInMillis(e.getEndDate()); diff --git a/app/src/main/java/de/sebse/fuplanner/tools/ui/weekview/MonthLoader.java b/app/src/main/java/de/sebse/fuplanner/tools/ui/weekview/MonthLoader.java index d958678..2f76cb1 100644 --- a/app/src/main/java/de/sebse/fuplanner/tools/ui/weekview/MonthLoader.java +++ b/app/src/main/java/de/sebse/fuplanner/tools/ui/weekview/MonthLoader.java @@ -1,12 +1,14 @@ package de.sebse.fuplanner.tools.ui.weekview; +import android.util.SparseArray; +import java.util.ArrayList; import java.util.Calendar; import java.util.List; public class MonthLoader implements WeekViewLoader { - + private SparseArray> cachedEvents = new SparseArray<>(3); private MonthChangeListener mOnMonthChangeListener; public MonthLoader(MonthChangeListener listener) { @@ -20,7 +22,17 @@ public class MonthLoader implements WeekViewLoader { @Override public List onLoad(int periodIndex) { - return mOnMonthChangeListener.onMonthChange(periodIndex / 12, periodIndex % 12 + 1); + SparseArray> newCache = new SparseArray<>(3); + ArrayList result = new ArrayList<>(); + for (int i = periodIndex - 1; i <= periodIndex + 1; i++) { + List events = cachedEvents.get(i, null); + if (events == null) + events = mOnMonthChangeListener.onMonthChange(i / 12, i % 12 + 1); + newCache.put(i, events); + result.addAll(events); + } + cachedEvents = newCache; + return result; } public MonthChangeListener getOnMonthChangeListener() { diff --git a/app/src/main/java/de/sebse/fuplanner/tools/ui/weekview/WeekView.java b/app/src/main/java/de/sebse/fuplanner/tools/ui/weekview/WeekView.java index 7eb522d..26604b4 100644 --- a/app/src/main/java/de/sebse/fuplanner/tools/ui/weekview/WeekView.java +++ b/app/src/main/java/de/sebse/fuplanner/tools/ui/weekview/WeekView.java @@ -38,7 +38,6 @@ import android.view.View; import android.view.ViewConfiguration; import android.widget.OverScroller; - import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; @@ -863,9 +862,9 @@ public class WeekView extends View { limitEventTime(days); } - for (int dayNumber = leftDaysWithGaps + 1; - dayNumber <= leftDaysWithGaps + getRealNumberOfVisibleDays() + 1; - dayNumber++) { + int checkFirst = leftDaysWithGaps + 1; + int checkLast = checkFirst + getRealNumberOfVisibleDays(); + for (int dayNumber = checkFirst; dayNumber <= checkLast; dayNumber++) { // Check if the day is today. day = (Calendar) mHomeDate.clone(); @@ -882,7 +881,7 @@ public class WeekView extends View { // Get more events if necessary. We want to store the events 3 months beforehand. Get // events only when it is the first iteration of the loop. if (mEventRects == null || mRefreshEvents || - (dayNumber == leftDaysWithGaps + 1 && mFetchedPeriod != (int) mWeekViewLoader.toWeekViewPeriodIndex(day) && + (dayNumber == checkFirst && mFetchedPeriod != (int) mWeekViewLoader.toWeekViewPeriodIndex(day) && Math.abs(mFetchedPeriod - mWeekViewLoader.toWeekViewPeriodIndex(day)) > 0.5)) { getMoreEvents(day); mRefreshEvents = false;