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);
while (it_modEvents.hasNext()) {
Event e = it_modEvents.next();
//log.d("Event in while", e.toString());
Calendar ende = Calendar.getInstance();
ende.setTimeInMillis(e.getEndDate());

View File

@@ -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<List<? extends WeekViewEvent>> cachedEvents = new SparseArray<>(3);
private MonthChangeListener mOnMonthChangeListener;
public MonthLoader(MonthChangeListener listener) {
@@ -20,7 +22,17 @@ public class MonthLoader implements WeekViewLoader {
@Override
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() {

View File

@@ -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;