首先,这篇是观我大郭神博客之后的学习总结!!下面链接就是郭大神的对ListView的源码解析。先献上我的膝盖,膜拜~
Android ListView工作原理完全解析,带你从源码的角度彻底理解
ListView…..虐我千百遍啊!!我却还待它如初恋!!!这只磨人的小妖精,天生自带无比强大的洪荒之力,但是如果你控制不住它那颗不羁的心的话,你将会被折磨得不要不要的。
今天,我们就来找出它不安分的内在,来探讨如何安抚那颗不羁的心。
一、ListView的背景及Adapter
ListView的背景
我们来看一下ListView的继承树:
ListView是直接继承于AbsListView,也就是说它老爸是AbsListView。而AbsListView有两个子实现类,一个是ListView,另一个是GridView。所以接触过GridView的同学,应该了解到,ListVIew和GridView两兄弟在很多地方是有很多共同点的,比如它俩都天生自带强大无比的洪荒之力。到这大家就奇怪了,这么屌的力量到底是从何而来?很明显啦,拼的就是爹~ListView的作用
ListView只有一项工作,那就是展示数据。它并不关系数据从哪而来,数据到底是什么类型等等,它只负责展示数据。但是,它要是没数据的话也谈不上展示了。所以它有一个好基友,那就是Adapter。ListView需要访问什么数据,都是吩咐Adapter帮忙去访问数据的。两朋友形成了一种良好的工作模式,Adapter只负责提供数据,ListView只负责展示数据。所以要了解ListView那颗浪荡不羁的心,我们也需要了解Adapter,这样才能更好地把控ListView的洪荒之力。Adapter的作用
Adapter做的工作,就是帮ListView去适配数据源的,这样ListView就不用烦恼数据的问题了,它就可以专心做好展示的工作。Adapter本身是一个接口,所以它能实现各种各样的子类,子类就通过自己特定的逻辑去完成特定的功能,去适配特定的数据。例如,ArrayAdapter可以用于数组和List类型的数据源适配等等。
同时,我们继承Adapter的时候,有一个灰常重要的方法需要我们重写,那就是public View getView()
方法。一般我们会这样写:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
if (convertView == null) {
view = LayoutInflater.from(context).inflate(resourceId, null);
······
} e