Fixed Month Loading Problem

This commit is contained in:
Caesar2011
2018-07-29 00:41:09 +02:00
parent 1608894635
commit f4428dff70
3 changed files with 18 additions and 8 deletions

View File

@@ -119,7 +119,6 @@ public class ScheduleFragment extends Fragment implements MonthLoader.MonthChang
Iterator<Event> it_modEvents = mod.events.getEventsOfMonth(newYear, newMonth); Iterator<Event> it_modEvents = mod.events.getEventsOfMonth(newYear, newMonth);
while (it_modEvents.hasNext()) { while (it_modEvents.hasNext()) {
Event e = it_modEvents.next(); Event e = it_modEvents.next();
//log.d("Event in while", e.toString());
Calendar ende = Calendar.getInstance(); Calendar ende = Calendar.getInstance();
ende.setTimeInMillis(e.getEndDate()); ende.setTimeInMillis(e.getEndDate());

View File

@@ -1,12 +1,14 @@
package de.sebse.fuplanner.tools.ui.weekview; package de.sebse.fuplanner.tools.ui.weekview;
import android.util.SparseArray;
import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.List; import java.util.List;
public class MonthLoader implements WeekViewLoader { public class MonthLoader implements WeekViewLoader {
private SparseArray<List<? extends WeekViewEvent>> cachedEvents = new SparseArray<>(3);
private MonthChangeListener mOnMonthChangeListener; private MonthChangeListener mOnMonthChangeListener;
public MonthLoader(MonthChangeListener listener) { public MonthLoader(MonthChangeListener listener) {
@@ -20,7 +22,17 @@ public class MonthLoader implements WeekViewLoader {
@Override @Override
public List<? extends WeekViewEvent> onLoad(int periodIndex) { public List<? extends WeekViewEvent> onLoad(int periodIndex) {
return mOnMonthChangeListener.onMonthChange(periodIndex / 12, periodIndex % 12 + 1); SparseArray<List<? extends WeekViewEvent>> newCache = new SparseArray<>(3);
ArrayList<WeekViewEvent> result = new ArrayList<>();
for (int i = periodIndex - 1; i <= periodIndex + 1; i++) {
List<? extends WeekViewEvent> 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() { public MonthChangeListener getOnMonthChangeListener() {

View File

@@ -38,7 +38,6 @@ import android.view.View;
import android.view.ViewConfiguration; import android.view.ViewConfiguration;
import android.widget.OverScroller; import android.widget.OverScroller;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
@@ -863,9 +862,9 @@ public class WeekView extends View {
limitEventTime(days); limitEventTime(days);
} }
for (int dayNumber = leftDaysWithGaps + 1; int checkFirst = leftDaysWithGaps + 1;
dayNumber <= leftDaysWithGaps + getRealNumberOfVisibleDays() + 1; int checkLast = checkFirst + getRealNumberOfVisibleDays();
dayNumber++) { for (int dayNumber = checkFirst; dayNumber <= checkLast; dayNumber++) {
// Check if the day is today. // Check if the day is today.
day = (Calendar) mHomeDate.clone(); 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 // 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. // events only when it is the first iteration of the loop.
if (mEventRects == null || mRefreshEvents || 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)) { Math.abs(mFetchedPeriod - mWeekViewLoader.toWeekViewPeriodIndex(day)) > 0.5)) {
getMoreEvents(day); getMoreEvents(day);
mRefreshEvents = false; mRefreshEvents = false;