本篇博客教大家如何使用convertView和viewHolder(static)改善ListView卡顿;但是当ListView加载大量复杂的布局和图片时,即使使用了convertView和viewHolder,ListView还是卡了一段时间,本文主要讨论如何在加载复杂的list_item的同时保证ListView的流畅性。核心思想是监听滑动数据加载,异步加载数据。getView函数一定不能耗时,耗时的任务一定要异步加载。主要方法:首先判断ListView当前的状态,只有当ListView停止滑动时才会开启新的线程加载数据,其他状态忽略。使用getFirstVisiblePosition和getLastVisiblePosition方法显示项目。耗时的任务一定不能在getView方法中执行,必须异步执行。具体代码如下://判断listView的状态AbsListView.OnScrollListeneronScrollListener=newAbsListView.OnScrollListener(){//ListView//Touch事件{scroll{}caseAbsListView.OnScrollListener.SCROLL_STATE_FLING://滑动状态threadFlag=false;break;caseAbsListView.OnScrollListener.SCROLL_STATE_IDLE://stopthreadFlag=true;startThread();//开启新线程并加载数据break;caseAbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL://touchlistViewthreadFlag=false;break;default://Toast.makeText(contextt,"default",//Toast.LENGTH_SHORT).show();break;}}};相信以上三点就可以自由使用ListView的使用了。
