码迷,mamicode.com
首页 > 移动开发 > 详细

Android ListView 优化最佳实践

时间:2014-12-09 17:48:50      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:android listview   optimization   

原文地址链接:http://stackvoid.com/list-view-optimization-best-practice-android/


有篇博客教大家如何利用 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哈哈~

Android ListView 优化最佳实践

标签:android listview   optimization   

原文地址:http://blog.csdn.net/drunkcello/article/details/41825691

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!