ListView中 局部刷新Item 實現下載進度條局部更新

問題引入:

demo中需做個下載個下載管理界面。同時只能下載一個任務,但是下載隊列可以有多個下載任務。

當更新當前正在下載的任務的時候,使用 notifyDataSetChanged();方法會使整個頁面都會刷新。

而且進度更新比較頻繁,這就造成了內存的消耗和頁面卡頓(在進度更新很頻繁的情況),筆者甚至出現了卡住頁面無法進行操作的情況。

所以想到了能不能局部刷新某個Item。也查了下資料,問題解決。

解決思路:

通過listview.getFirstVisiblePosition()方法獲取到顯示的item的首個位置 ,再根據position, 計算出view的位置。獲取到具體的view後,對view進行操作,就能夠實現局部刷新了。

關鍵代碼:

  1. public void updateView(int itemIndex) {  
  2.         //得到第一個可顯示控件的位置,  
  3.         int visiblePosition = mListView.getFirstVisiblePosition();  
  4.         //只有當要更新的view在可見的位置時才更新,不可見時,跳過不更新  
  5.         if (itemIndex - visiblePosition >= 0) {  
  6.             //得到要更新的item的view  
  7.             View view = mListView.getChildAt(itemIndex - visiblePosition);  
  8.             //從view中取得holder  
  9.             ViewHolder holder = (ViewHolder) view.getTag();  

  10.             HashMap<String, Object> item = data.get(itemIndex);  
  11.             //獲取到具體的控件,
  12.             holder.name = (TextView) view.findViewById(R.id.name);  
  13.             holder.process = (ProcessBar) view.findViewById(R.id.process);  
  14.             .......
  15.             //對控件進行操作
  16.             holder.process.setMax(item.get("max"));
  17.             holder.process.setProgress(item.get("progress"));
  18.             ......
  19.      
  20.         }         
  21.     }  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章