Android ListView 優化最佳實踐

jopen 10年前發布 | 15K 次閱讀 Android開發 移動開發 Android ListView

有篇博客教大家如何利用 convertView 以及 viewHolder(static) 改善 ListView 卡頓情況;但是在 ListView 加載大量復雜布局和圖片的時候,即使使用了 convertView 和 viewHolder,ListView還是卡頓,本文主要討論了如何在加載復雜 list_item 同時保證 ListView 流暢性。

核心思想是

監聽滑動據加載,異步加載數據。

getView 函數一定不能耗時,有耗時任務要異步加載。

主要的方法:

  1. 先判斷當前 ListView 的狀態,只有 ListView 停止滑動才開啟新線程加載數據,其他狀態均忽略。

  2. 使用 getFirstVisiblePosition 和 getLastVisiblePosition 方法來顯示 item。

  3. 耗時任務一定不要在 getView 方法中進行,最好異步進行。

具體代碼如下:

 1 //1. 判斷listView狀態
 2 AbsListView.OnScrollListener onScrollListener = new AbsListView.OnScrollListener() {// ListView
 3 // 觸摸事件
 4 
 5 public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
 6 }
 7 
 8 public void onScrollStateChanged(AbsListView view, int scrollState) {
 9 switch (scrollState) {
10   case AbsListView.OnScrollListener.SCROLL_STATE_FLING:// 滑動狀態
11   threadFlag = false;
12   break;
13   case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:// 停止
14   threadFlag = true;
15   startThread();//開啟新線程,加載數據
16   break;
17   case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:// 觸摸listView
18   threadFlag = false;
19   break;
20   default:
21   // Toast.makeText(contextt, "default",
22   // Toast.LENGTH_SHORT).show();
23   break;
24   }
25 }
26 };

相信做到以上三點,就能運用自如的使用 ListView了,O(∩_∩)O哈哈~

來自:http://stackvoid.com/list-view-optimization-best-practice-android/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!