您的位置:首页 > 其它

ListView优化

2016-09-03 18:48 225 查看
第0层: 不优化:

每次执行getView(), 都会执行: converterView = View.inflate(R.layout.xxx);

问题: 效率太低, 在快速滑动时会有卡顿, 在数据很多时甚至会内存溢出

第一层: 复用converterView

if(converterView==null) {

converterView = View.inflate(R.layout.xxx); //n+1

}

问题: 每次执行getView()都需要执行converterView.findViewById()得到子View ImageView

第二层: 使用ViewHolder, 减少findViewById()的次数

Viewholder holder = null;

if(converterView==null) {

converterView = View.inflate(R.layout.xxx);

holder = new ViewHolder();

holder.imageView = (ImageView)converterView.findViewById(xxx);

holder.textView = (TextView)converterView.findViewById(yyy);

converterView.setTag(holder);

} else {

holder = (Viewholder )converterView.getTag();

}

Person p = data.get(position);

holder.imageView.setimage(p.getIcon())

holder.textView.setText(p.getName())

static class ViewHolder {

ImageView imageView;

TextView textView;

}

//json: [{}, {}]

问题1: 对于联网获取列表数据, 如果数据量太大(比如超过100000条甚至更多), 一次获取出来显示, 太慢太耗流量: 第四层优化

问题2: 对于联网获取列表数据, 如果包含图片数据, 每次都请求获取显示, 太慢太耗流量: 第三层优化

第三层优化: 图片三级缓存处理

参见图片三级缓存机制

第四层: 对数据列表进行分页加载显示

1). 自己做: 通过Scroll监听listView.setonScrollListener(scrollListener), 当到达底部时加载下一页列表数据并显示

2). 使用第三方开源框架: Android-PullToRefresh或其它

listview.setpadding(l,t,r,b)//设置ListView位置

listview.setDividerHeight(0);//去掉ListView的线条

listview.setCacheColorHint(Color,TRANSPARENT);//低版本屏幕按下变色

listview.setfadingedge(none)模糊
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: