【Android】论ViewHolder存在的意义

 2023-09-05 阅读 31 评论 0

摘要:2019独角兽企业重金招聘Python工程师标准>>> 第一次学ListView基本是半懂,adapter也是看着别人的代码打一遍硬生生记下来的,以至于一直不怎么懂ViewHolder的作用。 到后来学有小成后,自作聪明的放弃了ViewHolder的写法,改成下面这种格式

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

第一次学ListView基本是半懂,adapter也是看着别人的代码打一遍硬生生记下来的,以至于一直不怎么懂ViewHolder的作用。

到后来学有小成后,自作聪明的放弃了ViewHolder的写法,改成下面这种格式:

if (convertView==null) {convertView = inflater.inflate(R.layout.item_table, null);
}
TextView tv1 = (TextView) convertView.findViewById(R.id.tv_1);
TextView tv2 = (TextView) convertView.findViewById(R.id.tv_2);
tv1.setText("test");
...
return convertView;

当然,运行效果是一样的,但因为每次都用了findViewById,效率肯定会有些影响。

所以谷歌才会鼓励ViewHolder的写法:

ViewHolder holder = null;
if (convertView==null) {convertView = inflater.inflate(R.layout.item_table, null);holder.tv1 = (TextView) convertView.findViewById(R.id.tv_1);holder.tv2 = (TextView) convertView.findViewById(R.id.tv_2);
}else {holder = (ViewHolder) convertView.getTag();
}
holder.tv1.setText("test");
...
return convertView;

这种写法的好处显而易见,将convertView中的View以ViewHolder的实例存入tag中复用,从而减少findViewById的调用,避免了资源浪费。(findViewById每次都会创建一个新的实例


虽然ViewHolder能提高执行效率,但实际运行的效果并无太大差别,并且每个Adapter都要写多一个ViewHolder类,烦的要死,这也是导致我放弃ViewHolder的原因。

于是,下面推荐大家看看ViewHolder的另一种写法:

http://my.oschina.net/jack1900/blog/289164

用这个ViewHolder无需每次都写多一个类,只需这样:

if (convertView==null) {convertView = inflater.inflate(R.layout.item_table, null);
}
TextView tv1 = ViewHolder.get(convertView, R.id.tv_1);
TextView tv2 = ViewHolder.get(convertView, R.id.tv_2);
tv1.setText("test");
...
return convertView;

真心好用!推荐大家也用这个~~

转载于:https://my.oschina.net/u/816576/blog/414479

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/1484.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息