提高ListView滚动的高效优化
2015-11-19 15:26
197 查看
【ListView伴随着网络加载,怎么能提高效率?】
拖动时通常加载数据,滑动的同时去加载,有时候会让设备出现卡顿
以网络加载图片为例
解决方案:
1. ListView 滑动停止后才加载可见项
2. ListView滑动时,取消所有加载项
实现:
修改自定义适配器
1. 实现接口
2. 实现两个方法
将加载图片的控制权从getView到onScrollStateChanged
滚动时候停止加载,停止时加载
3. 注册接口
4.实现之后还有一个问题,就是首次进入时不会加载,可以增加一个flag去判断是否为第一个启动
a.添加一个变量
b.初始化的时候赋值(红色标注)
c.在onScroll进行判断 (在每次启动时,并不会调用onScrollStateChanged方法 ,
而onScroll方法都会首先调用,所以可以在onScroll方法进行判断)
拖动时通常加载数据,滑动的同时去加载,有时候会让设备出现卡顿
以网络加载图片为例
解决方案:
1. ListView 滑动停止后才加载可见项
2. ListView滑动时,取消所有加载项
实现:
修改自定义适配器
1. 实现接口
public class NewsAdapter extends BaseAdapter implements AbsListView.OnScrollListener{
2. 实现两个方法
@Override public void onScrollStateChanged(AbsListView view, int scrollState) { if (scrollState == SCROLL_STATE_IDLE){ //加载可见项 mImageLoader.loadImages(mStart, mEnd); }else { //停止任务 mImageLoader.cancelAllTasks(); } }
将加载图片的控制权从getView到onScrollStateChanged
滚动时候停止加载,停止时加载
3. 注册接口
//注册接口,给传入的ListView绑定一个监听事件 listView.setOnScrollListener(this);
4.实现之后还有一个问题,就是首次进入时不会加载,可以增加一个flag去判断是否为第一个启动
a.添加一个变量
private boolean mFirstIn;
b.初始化的时候赋值(红色标注)
public NewsAdapter(Context context, List<NewsBean> data, ListView listView){
mList = data;
mInflater = LayoutInflater.from(context);
mImageLoader = new ImageLoader(listView);
URLS = new String[data.size()];
//保存当前我们获取到的所有的图片的Url
for (int i=0; i<data.size(); i++){
URLS[i] = data.get(i).newsIconUrl;
}
<span style="color:#ff0000;">mFirstIn = true;</span>
//注册接口,给传入的ListView绑定一个监听事件 listView.setOnScrollListener(this);
}
c.在onScroll进行判断 (在每次启动时,并不会调用onScrollStateChanged方法 ,
而onScroll方法都会首先调用,所以可以在onScroll方法进行判断)
@Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { mStart = firstVisibleItem; mEnd = firstVisibleItem + visibleItemCount; <span style="color:#ff0000;">if (mFirstIn && visibleItemCount>0){ mImageLoader.loadImages(mStart, mEnd); mFirstIn = false; }</span> }
相关文章推荐
- Android下的弹幕的简单实现
- Linux内核驱动GPIO的使用
- 网页打开 qq 和发送邮件
- 去掉界面的title和状态栏
- c++中switch语句的使用问题
- Linux下进程间通信方式
- Linux客户端Dr.com安装及使用说明
- freemarker+spring中文乱码的解决
- 关于批量选择新增成员到群组列表的实现方法。
- 2015-05-25-常用命令一览
- linux设置ip地址以及dns
- VS2010如何调试IIS上的网站
- Data Binding Guide
- ubuntu14.04+opencv 3.0安装及测试
- android蓝牙4.0(BLE)开发之ibeacon初步
- Android中执行java命令的方法及java代码执行并解析shell命令
- Vlan Mapping和Mux Vlan配置
- 查询系统负载信息 Linux 命令详解
- C语言中下标与指针的转换以及指向指针的指针的例子
- android6.0&小米note标配版