国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Android奇巧:ListView實現Item局部刷新

移動開發
但是博主在做公司項目的時候,有個下載模塊,因為可能同時下載好幾個數據,所以用的listview展示所有正在下載的內容。因為下載進度要實時更新,所以要不停的調用notifyDateSetChanged刷新數據。這樣會不停的重新繪制整個listview的界面,性能開銷非常大。

對于ListView數據的刷新大家都知道,改變Adapter的數據源,然后調用Adapter的notifyDateSetChanged()方法即可。

但是博主在做公司項目的時候,有個下載模塊,因為可能同時下載好幾個數據,所以用的listview展示所有正在下載的內容。因為下載進度要實時更新,所以要不停的調用notifyDateSetChanged刷新數據。這樣會不停的重新繪制整個listview的界面,性能開銷非常大。而且如果每個item有圖片的話,每個item的圖片都需要重新加載,就算圖片做了內存緩存,刷新一下圖片也會閃一下,不停的刷新就會導致各個item的圖片不停的閃,體驗一點都不好。

那么對于上面問題,有沒有解決辦法呢?當然是有的。我們可以針對某一個item進行局部更新,而不影響其它沒有修改的item。那么具體如何實現的呢?我們看下面的代碼。

  1. 1 private void updateView(int itemIndex) { 
  2. 2 //得到***個可顯示控件的位置, 
  3. 3 int visiblePosition = mListView.getFirstVisiblePosition(); 
  4. 4 //只有當要更新的view在可見的位置時才更新,不可見時,跳過不更新 
  5. 5 if (itemIndex - visiblePosition >= 0) { 
  6. 6 //得到要更新的item的view 
  7. 7 View view = mListView.getChildAt(itemIndex - visiblePosition); 
  8. 8 //調用adapter更新界面 
  9. 9 mAdapter.updateView(view, itemIndex); 
  10. 10 } 
  11. 11 } 

這個函數主要是根據傳入的itemIndex來獲取第itemIndex的數據所顯示的view。itemIndex就是要修改的數據再List集合中的位置,比如我這里下載進度有更新,發了一個廣播這里接收到了,需要修改該下載內容的進度條,廣播接收器可以這么寫:
 

 

  1.  1 @Override 
  2. 2 public void onReceive(Context context, Intent intent) { 
  3. 3 AppContent appContent = intent.getParcelableExtra("appContent"); 
  4. 4 if(appContent == nullreturn
  5. 5 int itemIndex = 0
  6. 6 for(AppContent appContent1 : mList) { 
  7. 7 if(appContent.getUrl().equals(appContent1.getUrl())) { 
  8. 8 itemIndex = mList.indexOf(appContent1); 
  9. 9 appContent1.setDownloadPercent(appContent.getDownloadPercent()); 
  10. 10 break
  11. 11 } 
  12. 12 } 
  13. 13 updateView(itemIndex); 
  14. 14 } 
  15.  
  16. 下面看Adapter的具體代碼: 
  17.  
  18. 1 public class AppContentAdapter extends BaseAdapter{ 
  19. 2 
  20. 3 private List<AppContent> mDates = null
  21. 4 private Context mContext; 
  22. 5 
  23. 6 public AppContentAdapter(Context context) { 
  24. 7 this.mContext = context; 
  25. 8 } 
  26. 9 
  27. 10 @Override 
  28. 11 public int getCount() { 
  29. 12 return mDates.size(); 
  30. 13 } 
  31. 14 
  32. 15 @Override 
  33. 16 public Object getItem(int position) { 
  34. 17 return mDates.get(position); 
  35. 18 } 
  36. 19 
  37. 20 @Override 
  38. 21 public long getItemId(int position) { 
  39. 22 return position; 
  40. 23 } 
  41. 24 
  42. 25 public void setDates(List<AppContent> mDates) { 
  43. 26 this.mDates = mDates; 
  44. 27 } 
  45. 28 
  46. 29 @Override 
  47. 30 public View getView(int position, View convertView, ViewGroup parent) { 
  48. 31 ViewHolder holder = null
  49. 32 if (convertView == null) { 
  50. 33 holder = new ViewHolder(); 
  51. 34 convertView = LayoutInflater.from(mContext).inflate( 
  52. 35 R.layout.listitem_download, null); 
  53. 36 holder.statusIcon = (DownloadPercentView) convertView.findViewById(R.id.status_icon); 
  54. 37 holder.name = (TextView) convertView.findViewById(R.id.name); 
  55. 38 holder.downloadPercent = (TextView) convertView.findViewById(R.id.download_percent); 
  56. 39 holder.progressBar = (ProgressBar) convertView.findViewById(R.id.progressbar); 
  57. 40 convertView.setTag(holder); 
  58. 41 } else { 
  59. 42 holder = (ViewHolder) convertView.getTag(); 
  60. 43 } 
  61. 44 setData(holder, position); 
  62. 45 return convertView; 
  63. 46 } 
  64. 47 
  65. 48 /** 
  66. 49 * 設置viewHolder的數據 
  67. 50 * @param holder 
  68. 51 * @param itemIndex 
  69. 52 */ 
  70. 53 private void setData(ViewHolder holder, int itemIndex) { 
  71. 54 AppContent appContent = mDates.get(itemIndex); 
  72. 55 holder.name.setText(appContent.getName()); 
  73. 56 holder.progressBar.setProgress(appContent.getDownloadPercent()); 
  74. 57 setIconByStatus(holder.statusIcon, appContent.getStatus()); 
  75. 58 if(appContent.getStatus() == AppContent.Status.PENDING) { 
  76. 59 holder.downloadPercent.setVisibility(View.INVISIBLE); 
  77. 60 } else { 
  78. 61 holder.downloadPercent.setVisibility(View.VISIBLE); 
  79. 62 holder.statusIcon.setProgress(appContent.getDownloadPercent()); 
  80. 63 holder.downloadPercent.setText("下載進度:" + appContent.getDownloadPercent() + "%"); 
  81. 64 } 
  82. 65 } 
  83. 66 
  84. 67 
  85. 68 /** 
  86. 69 * 局部刷新 
  87. 70 * @param view 
  88. 71 * @param itemIndex 
  89. 72 */ 
  90. 73 public void updateView(View view, int itemIndex) { 
  91. 74 if(view == null) { 
  92. 75 return
  93. 76 } 
  94. 77 //從view中取得holder 
  95. 78 ViewHolder holder = (ViewHolder) view.getTag(); 
  96. 79 holder.statusIcon = (DownloadPercentView) view.findViewById(R.id.status_icon); 
  97. 80 holder.name = (TextView) view.findViewById(R.id.name); 
  98. 81 holder.downloadPercent = (TextView) view.findViewById(R.id.download_percent); 
  99. 82 holder.progressBar = (ProgressBar) view.findViewById(R.id.progressbar); 
  100. 83 setData(holder, itemIndex); 
  101. 84 } 
  102. 85 
  103. 86 /** 
  104. 87 * 根據狀態設置圖標 
  105. 88 * @param downloadPercentView 
  106. 89 * @param status 
  107. 90 */ 
  108. 91 private void setIconByStatus(DownloadPercentView downloadPercentView, AppContent.Status status) { 
  109. 92 downloadPercentView.setVisibility(View.VISIBLE); 
  110. 93 if(status == AppContent.Status.PENDING) { 
  111. 94 downloadPercentView.setStatus(DownloadPercentView.STATUS_PEDDING); 
  112. 95 } 
  113. 96 if(status == AppContent.Status.DOWNLOADING) { 
  114. 97 downloadPercentView.setStatus(DownloadPercentView.STATUS_DOWNLOADING); 
  115. 98 } 
  116. 99 if(status == AppContent.Status.WAITING) { 
  117. 100 downloadPercentView.setStatus(DownloadPercentView.STATUS_WAITING); 
  118. 101 } 
  119. 102 if(status == AppContent.Status.PAUSED) { 
  120. 103 downloadPercentView.setStatus(DownloadPercentView.STATUS_PAUSED); 
  121. 104 } 
  122. 105 if(status == AppContent.Status.FINISHED) { 
  123. 106 downloadPercentView.setStatus(DownloadPercentView.STATUS_FINISHED); 
  124. 107 } 
  125. 108 } 
  126. 109 
  127. 110 private class ViewHolder { 
  128. 111 private DownloadPercentView statusIcon; 
  129. 112 private TextView name; 
  130. 113 private TextView downloadPercent; 
  131. 114 private ProgressBar progressBar; 
  132. 115 } 
  133. 116 } 

詳細示例參考:https://github.com/liuling07/MultiTaskAndThreadDownload

責任編輯:chenqingxiang 來源: 博客園
相關推薦

2013-08-07 10:47:58

Android特效ListView

2013-08-07 10:35:02

AndroidListView拖拽

2015-03-26 13:14:53

javascriptjs callback實現調用

2014-07-16 13:08:24

ListViewItem View

2011-04-11 13:43:35

popupwindowlistviewAndroid

2013-11-05 11:25:21

Android 4.4系統詳解

2012-12-26 15:19:09

Android開發ListView

2011-05-27 15:02:15

Android ListView

2011-04-11 14:14:29

checkboxlistviewAndroid

2013-03-27 09:17:17

Android開發AndroidList

2011-06-03 10:48:23

Android ListView

2013-04-02 13:04:07

ListView平滑滾

2014-12-30 11:51:35

ListViewItem View

2014-12-17 09:46:30

AndroidListView最佳實踐

2013-07-17 16:33:02

下拉刷新listvie滾動到底部加載Android開發學習

2023-12-13 10:07:56

地圖自動駕駛

2013-07-10 10:21:22

Android Lis

2017-11-08 14:34:20

圖片fresco程序員

2015-07-28 14:39:02

IOS技巧

2010-01-12 10:48:54

VB.NET LIST
點贊
收藏

51CTO技術棧公眾號

日韩三级影视基地| 日韩精品在线观看av| 亚洲欧洲在线一区| 婷婷五月在线视频| 国产精品粉嫩av| 国产成人澳门| 久久久久久久综合日本| 国内久久精品视频| 日韩精品久久久久| 免费观看中文字幕| 亚洲成人看片| 91丨porny丨国产入口| 麻豆国产va免费精品高清在线| 91视频成人免费| а√天堂中文在线资源8| 久草精品在线观看| 亚洲欧美日韩网| 分分操这里只有精品| 热久久久久久| 国产午夜亚洲精品午夜鲁丝片 | 国产精品亚洲网站| 黄动漫在线观看| 一本到12不卡视频在线dvd| 91精品免费在线观看| 一本二本三本亚洲码| 亚洲综合色婷婷在线观看| 亚洲成精国产精品女| 免费观看国产精品视频| 色吧亚洲视频| 玛雅亚洲电影| 久久综合九色欧美综合狠狠| 久久久久久噜噜噜久久久精品| 激情丁香在线| 亚洲一二三区视频在线观看| 久久久影院一区二区三区| 欧美高清xxx| 午夜不卡av免费| 美国一级片在线免费观看视频| 另类小说综合欧美亚洲| 色综合天天综合网国产成人网| 亚洲大胆精品| 蜜乳av一区二区| 久久久免费高清电视剧观看| 国产区在线视频| 国产伦精品一区二区三区免费| 国内精品久久久久伊人av| 欧美色资源站| 日韩欧美成人午夜| 激情亚洲色图| 日韩av二区在线播放| 91av在线免费观看| 黑人玩欧美人三根一起进| 国产精品久久久久久久午夜片| 国产精品久久久一区二区三区| 成人av集中营| 欧美探花视频资源| 国产精品自拍片| 亚洲国产精品传媒在线观看| 日韩三级电影| 亚洲黄页网站| 亚洲视频综合网| lutube成人福利在线观看| 欧美国产精品专区| 蝌蚪视频在线播放| 亚洲精选在线观看| 亚洲理论电影片| 欧美在线视频一区二区三区| 精品久久影视| 欧美成人性生活| а√在线中文在线新版| 色综合久久悠悠| 欧美午夜一区| 国产精品国模在线| 91精品一区| 亚洲激情小视频| 搞黄视频免费在线观看| 欧美成a人片免费观看久久五月天| 亚洲人成在线电影| 在线视频日韩| 国产日产欧产精品推荐色 | 精品国产91亚洲一区二区三区婷婷| 五月天久久比比资源色| 久久蜜臀中文字幕| 欧美在线激情网| 福利影院在线看| 91精品国产高清久久久久久久久| 亚洲一区国产| 国产一区二区视频在线免费观看| 精品国产一区二区三区av片| 欧美一区二区三区在线播放| 国产精品短视频| 亚洲插插视频| 日韩国产欧美精品在线| 欧美精品一区二区三区精品| 黄色录像特级片| 欧美久久一二三四区| 成人高清免费在线播放| 九九热99久久久国产盗摄| 992tv国产精品成人影院| 91在线免费看片| 欧美freesex交免费视频| 国产精彩精品视频| 精品一区免费| 国产va免费精品高清在线观看| 日韩精品1区2区3区| 久久一区二区精品| 一区二区亚洲| 久久免费99精品久久久久久| 亚洲女同女同女同女同女同69| 九七伦理97伦理手机| 国产精品麻豆视频| 午夜国产一区二区三区| 最新热久久免费视频| 校园春色影音先锋| 欧美日韩中文字幕日韩欧美| 蜜桃免费在线| 久久久女人电视剧免费播放下载 | 中文字幕精品网| 久久久久久久性潮| 婷婷精品国产一区二区三区日韩| 欧美午夜寂寞影院| 99久久99久久精品国产片果冰| 99久久无色码| 丝袜国产日韩另类美女| 精品久久蜜桃| 麻豆精品在线观看| 国产在线三区| 欧美性xxxxxx少妇| 麻豆91精品视频| 午夜免费欧美电影| 久久韩国免费视频| 久草青青在线观看| 欧美国产成人在线| 色综合一区二区日本韩国亚洲| 一区二区不卡在线| 成人在线免费观看视频网站| 日韩欧美一级在线播放| 久久久久蜜桃| 精品国产一区二区三区麻豆小说| 午夜精品一区二区三区电影天堂 | 高清国产一区二区三区四区五区| 国产成人综合在线观看| 懂色av一区| 91精品国产一区二区三区动漫| 激情懂色av一区av二区av| 五月久久久综合一区二区小说| 污视频免费在线看| 国产精品一区二区a| 欧美色图在线观看| 91av一区| 国产精品一区二区羞羞答答| 国产在线精品一区| 日韩精品1区2区3区| 色网在线观看| 久久这里只有精品99| 久久精品人人做人人爽人人| 中文在线综合| 国产对白在线正在播放| 岛国视频一区免费观看| 成人黄色av网址| 在线观看免费网站| 欧美精品一级二级| 日韩av电影一区| 青青草国产一区二区三区| 亚洲免费看av| 5566中文字幕一区二区| 日韩欧美亚洲一区二区| 日本电影久久久| 七七婷婷婷婷精品国产| 在线国产情侣| 久久久精品欧美| 国产精品久久免费看| 亚洲经典一区| 国产不卡网站| 国产aa视频| xxxxx成人.com| 99在线高清视频在线播放| 一区二区欧美视频| 亚洲精品动漫| 午夜两性免费视频| 91夜夜未满十八勿入爽爽影院| 成人黄色国产精品网站大全在线免费观看 | 欧美日韩一区二区高清| 超碰在线资源| 国产日韩第一页| 国产网站免费在线观看| 99久久免费精品| av免费在线观看网址| 欧美与欧洲交xxxx免费观看| 经典三级在线一区| 久久久久亚洲精品中文字幕| 澳门av一区二区三区| 精品av综合导航| 久久久无码精品亚洲日韩按摩| 五月久久久综合一区二区小说| 中文字幕免费高清电视剧网站在线观看| www一区二区www免费| 亚洲成人激情视频| 欧美区一区二| 欧美日韩国产网站|