APP内列表控件下载功能相关优化

概述

在AndroidApp开发过程当中,咱们常常会遇到在列表中点击按钮进行文件下载的操做。
因为以前项目中作的这块感受有点缺陷。
因此咱们想能不能有一种方式可以统一一下下载的回调。使其应用起来更加简单快捷。
复制代码

本工程思路

封装下载库的listener,把自定义下载的listener封装进下载库的直接listener当中。
在我点击下载时根据KeyGe参数,把下载库listener插入到manager的map中。
listview的item滚出屏幕时,移除自定义的listener。当listVew复用convertView。
清理掉自定义的listener而后更新存到下载库listener中的自定义listener。
这样的话就能够利用相同的代码实现不一样列表之间也能够进下载进度的调用
复制代码

以前下载

  1. 循环判断
koolearn的作法,根据下载回调中回调回来的bean循环判断当前列表中全部数据,检测到id相同,则更新数据
复制代码
  1. 定时刷新
职上的作法,以前因为参考播放器播放中时间刷新,在启动页面时作一个定时器,每一秒更新播放进度。
职上是每一秒读取一次数据库,更新下载播放进度。列表中没有下载的,则中止定时器,中止更新。
如今看并非好的方式。
复制代码

直接应用下载框架的回调

咱们在列表中的下载,假如直接把数据的回调应用到当前列表中,则会产生以下问题:git

1. 在listview中item复用时,原本没有点击下载的item当以前点击过下载的item划出,被复用到新来的item中,
会出现没有下载却显示进度回调问题。
2. 在点击下载的地方能够拿到回调更新,而跳转到其余页面好比下载队列,界面没法更新的问题。
复制代码

本工程要达到的目的

1. 当文件在A列表中下载,而后跳转到b列表,假如b列表中有相同的项目能够直接显示下载中的进度条等。
2. 利用把自定义listener添加进下载listener(还有删除,和更新等)的方式规避上面以前下载的问题。
3. 在使用此库时,能够把设置下载时对控件下载进度,下载状态已下大小等控件的设置单独抽取到一个类中完成。
分工更加明确。
4.支持一个app内多种下载库的统一。好比腾讯回放下载和GK下载。能够用此库把下载过程当中的回调统一块儿来。 
5.将来要增长数据库支持,让列表中的不一样类型下载执行不一样的数据库操做。-->还未完成
复制代码

工程结构图

使用方法

ListView中的使用

  1. ListView的Adapter中的ViewHolder须要实现BaseDownlViewHolder,以便从ViewHolder中获取KeyGen。例:
public class ViewHolder implements BaseDownlViewHolder {
        public Button name;
        public KeyGen keyGen;
        @Override
        public IKeyGen getKeyGen() {
            return keyGen;
        }
    }
复制代码
  1. 建立KeyGen做为下面处理使用 见图中①
  2. 点击下载时,new新的Listener,并把自定义listener放入其中见图中③。
  3. getView方法中若是是被服用的convert,则清理掉以前的自定义listener见图中②。而后任何状况下都更新一下自定义的listener见图中③

基本流程图

Demo地址数据库

相关文章
相关标签/搜索