android配适器Listview的ViewHolder和ConvertView的用法和原理
这两天一直在查listview 和ViewHolder和ConvertView,网上好多都是一篇文章转载n次,现今终于大致的明白一点,写下,待以后补充。
这个是网上转载次数最多的那篇文章的配的原理图。
现在来解释一下:一个手机屏幕上有第一列那1-7,只要你往上滑一下,1就没了,没了去哪了呢?就去了安卓给的recycle这个回收里了。这个回收是在ConvertView里的。也就是说Item1这个视图(View)已经变成旧的了,就如新袜子一样,穿过了隔一天就是旧的了,view就是新的,隔一天就变成ConvertView(这个旧的了),当然通过回收进行重新纺织还是能变成新的,这是后话 。
ConvertView:android SDK中这样讲参数 convertview :
the old view to reuse, if possible. Note: You should check that this view is non-null and of an appropriate type before using.
If it is not possible to convert this view to display the correct data, this method can create a new view.
翻译:
如果可以的话,这是旧View(视图)的重用。 建议:在用之前,你应该检查这个View是
不是非空,是不是一个合适的类型。
如果不可能让这个VIew去显示一个恰当的数据,这个方法会创建一个新的View。
也就是说这个ConvertView是一个能用就用的旧视图,我们通过往旧视图里添加item(信息)来实现不重复新建新视图。
后来的item8就是用的item1这个旧视图来填充新的数据进行显示的。
这涉及到ViewHolder
ViewHolder:是一个持有者的类,里面没有方法,只有属性,作用就是一个临时的储存器,把每次getView中每次返回的view储存起来,下次再用,不用再每次去布局文件中拿,从而提高了效率。也就是说ViewHolder是一个数据存储器,里面存的是要显示的数据,为的是listview滚动的时候快速设置值,而不必每次都重新创建很多对象,从而提升性能。
通过ConvertView.setTag(ViewHolder)=为视图绑定一个数据,来显示出来。
以上就是我这两天所学到的,可能有的地方理解有误,以后会进行更正和补充。
参考:
Android ViewHolder的作用与用法:https://zhidao.baidu.com/question/544207312.html
ListView中convertView和ViewHolder的工作原理:https://blog.****.net/Bill_Ming/article/details/8817172
Android ViewHolder的作用与用法 详解:https://blog.****.net/sky1466181491/article/details/48846985
android adapter中到converView机:https://hunankeda110.iteye.com/blog/1827691
[Android] ListView中getView的原理+如何在ListView中放置多个item:http://www.cnblogs.com/xiaowenji/archive/2010/12/08/1900579.html
convertView.setTag()这个api是不是使得viewholder与convertView同生命周期?:https://www.imooc.com/qadetail/74255
View.setTag()与View.getTag()的作用:http://www.cnblogs.com/qingblog/archive/2012/05/30/2526239.html
Android:ListView之ViewHolder:https://www.cnblogs.com/luoaz/p/3734999.html
Android必学之数据适配器BaseAdapter:https://www.cnblogs.com/caobotao/p/5061627.html