ListView复用原理和提升效率
复用原理以及提升效率
复用item
ListView在加载数据的时候是会复用item的,即ListView是会缓存至少一屏幕的item.
如下图所示。
从图上可以看出当item1滚出屏幕,并且一个新的项目从屏幕底端上来时,ListView再请求一个视图。convertView此时不是空值了,它的值是item1。你只需设定新的数据然后返回convertView,不必重新创建一个视图。
提高ListView的效率
最简单的使用ListView
没有复用convertView,每次都要重新创建,效率极其低下1
2
3
4
5
6
7
8public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater layoutInflater = LayoutInflater.from(context);
convertView = layoutInflater.inflate(R.layout.listview_item, null);
TextView textView = (TextView) (convertView).findViewById(R.id.textview);
textView.setText(persons.get(position).getName());
return convertView;
}
复用convertView
利用 convertView 回收视图, 效率提高 200%1
2
3
4
5
6
7
8
9
10
11public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater layoutInflater = LayoutInflater.from(context);
if (convertView == null) {
convertView = layoutInflater.inflate(R.layout.listview_item, null);
}
TextView textView = (TextView) (convertView).findViewById(R.id.textview);
textView.setText(persons.get(position).getName());
return convertView;
}
使用ViewHolder
使用ViewHolder模式效率再提高50%
1 | public View getView(int position, View convertView, ViewGroup parent) { |
通过本篇博客应该明白了ListView是怎样复用,以及怎样提高ListView的工作效率了。
欢迎大家关注我的微信公众号,我会不定期的分享些Android开发的技巧