[Android] 列表预加载工具类DataPreloader

DataPreloader用于实现列表数据预加载需求。注意这里的预加载是指预加载数据项的详细信息(例如预拉取视频列表里面某些视频的播放地址等),不是指预先拉取更多的列表项。

概念说明

  • 加载窗口preload window:即需要发起预加载的项目的index区间
  • 焦点:即当前外围逻辑所关心的中心点的index,决定了区间的中心
该工具类引入加载窗口的概念(由upperPosition和LowerPosition组成的闭区间),外围调用triggerPreload()传入当前焦点的index,该工具类即回调哪些index离开了加载窗口和哪些index进入了加载窗口(即窗口的变化情况)。外围可以根据回调来进行加载或取消加载。

使用说明

详见代码和注释如下所示:
mPreloader = new DataPreloader();
mPreloader.setDataSource(new DataPreloader.DataSource() {
    @Override
    public int getPreloadWindow(int direction) {
        // 返回窗口的上下界,每次更新窗口都会回调一次,可以根据业务逻辑调整具体值
        if (direction == DataPreloader.PRELOAD_RANGE_LOWER_BOUND) {
            return 2;
        } else if (direction == DataPreloader.PRELOAD_RANGE_UPPER_BOUND){
            return 2;
        } else {
            return -1;
        }
    }
    @Override
    public int getItemCount() {
        return 10;
    }
});
mPreloader.setWindowListener(new DataPreloader.WindowListener() {
    @Override
    public void onEnterPreloadWindow(int position) {
        // position位置的项目进入了preload window,已经进入了的不会再回调
        Log.d(TAG, "onEnterPreloadWindow() called with: position = [" + position + "] " + mPreloader.getFocusPointPosition());
    }
    @Override
    public void onExitPreloadWindow(int position) {
        // position位置的项目离开了preload window,已经离开了的不会再回调
        Log.d(TAG, "onExitPreloadWindow() called with: position = [" + position + "]" + mPreloader.getFocusPointPosition());
    }
});

// 在适当的时候(例如列表滑动停止的时候),出发preloader更新窗口位置
mPreloader.triggerPreload(position);
注意: 合理设置区间的upper和lower。例如用于列表预加载时,可只设置upperBound,而lowerBound设置为0,那么该工具类只会回调后面的数据,不会回调前面的数据 源码:https://gist.github.com/legendmohe/651cd418054a53f64bdd105f67265f15

查看原文:http://legendmohe.net/2018/03/29/android-%e5%88%97%e8%a1%a8%e9%a2%84%e5%8a%a0%e8%bd%bd%e5%b7%a5%e5%85%b7%e7%b1%bbdatapreloader/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值