package com.alamkanak.weekview;

import androidx.annotation.IntRange; import java.util.ArrayList; import java.util.Calendar; import java.util.List;

/**

  • A WeekViewLoader that prefetches data for multiple periods.

  • This class enhances data loading for WeekView by retrieving data not only for the current

  • period but also for a specified number of periods before and after it.

  • This improves performance and user experience by reducing the need for frequent data

  • requests when scrolling through the WeekView. */ public class PrefetchingWeekViewLoader implements WeekViewLoader { private WeekViewLoader weekViewLoader; private int prefetchingPeriod;

    /**

    • Constructs a new PrefetchingWeekViewLoader.
    • @param weekViewLoader The underlying WeekViewLoader to use for data loading.
    • @param prefetchingPeriod The number of periods to prefetch before and after the current
    • period. Must be at least 1. */ public PrefetchingWeekViewLoader(WeekViewLoader weekViewLoader, @IntRange(from = 1L) int prefetchingPeriod) { if (prefetchingPeriod < 1) { throw new IllegalArgumentException("Must specify prefetching period of at least 1!"); } this.weekViewLoader = weekViewLoader; this.prefetchingPeriod = prefetchingPeriod; }

    @Override public List onLoad(int periodIndex) { List loadedEvents = weekViewLoader.onLoad(periodIndex); List events = new ArrayList<>(); if (loadedEvents != null) { events.addAll(loadedEvents); } for (int i = 1; i <= this.prefetchingPeriod; i++) { loadedEvents = weekViewLoader.onLoad(periodIndex - i); if (loadedEvents != null) { events.addAll(loadedEvents); } loadedEvents = weekViewLoader.onLoad(periodIndex + i); if (loadedEvents != null) { events.addAll(loadedEvents); } } return events; }

    @Override public int toWeekViewPeriodIndex(Calendar instance) { return weekViewLoader.toWeekViewPeriodIndex(instance); } }

PrefetchingWeekViewLoader: Efficient Data Loading for WeekView in Android

原文地址: https://www.cveoy.top/t/topic/fv17 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录