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地址數據庫

相關文章
相關標籤/搜索