这里以ListView作演示,对于ListView我们再熟悉不过了,其步骤分为:
- 创建ListView的Bean对象
- 创建ListView的Adapter的ItemView布局
- 创建ListView的Adaoter(**重点)
- 对ListView设置Adapter
一、创建ListView的Bean对象
这里以学生信息为例
二、创建ListView的Adapter的ItemView布局
其最终效果为
三、创建ListView的Adaoter
这里采用官网的Adapter推荐写法,【你可以发现:Adapter缓存的只是每个ItemView的ViewHolder】
如果我们需要填充ItemView很多,那么getView()方法里面的代码会变得臃肿,难以阅读和修改,那我们就来美化一下代码吧
四、对ListView设置Adapter
容我一个强迫症的人先把这一点写完
这里我们就只看Adapter的代码美化,具体看getView()这个方法里面的内容,前面说了,Adapter缓存的只是ViewHolder,那么我们抽取这个ViewHolder
我们将中间的getView()里的findViewById()和convertView.setTag()抽取出来,如果要添加新的View,只需要在ViewHolder类中添加即可,我们可以看到不管对View添加多少,在getView()方法中只需要一句话,ViewHolder viewHolder=getViewHolder(convertView)
从上面的代码分析,在我们万能的ViewHolder类需要做什么:
- convertView缓存的是ViewHolder(所以我们需要一个convertView,作为ViewHolder的属性)
- getViewHolder的代码固定的(所以我们需要提供一个getViewHolder()方法将其锁死)
- findViewById每次增加View的时候都要执行(所以我们需要抽象一个方法来getView())
下面我们创建一个ViewHolder类(ViewHolder简单的理解为View的管理器)
ViewHolder类做了两件事情:
- getViewHolder()拿到这个ViewHolder对象
- 通过viewHolder.getView()方法来对View进行填充数据
万能Adapter很简单,就是在类里面用泛型T表示传进来的Bean对象,剩下的就是调用ViewHolder的事情
我们知道ViewHolder只是做了两件事情,那么我们就可以在Adapter中,雅思考试报名费调用这两件事情
我们看到getView()里的代码还是很多,不美观,根据面向对象的思想,我们可以将其抽取为一个抽象方法,让我们的前台去填充这个View
这个时候getView()里面的代码就只剩下一句话了
传统的使用:
万能Adapter的使用:
- 两者比较有好有坏,传统的前台代码简洁,而万能适配器的代码臃肿,不过万能适配器可以适配各种ListView和GridView
- 如果不明白的话,将万能适配器代码调用,一层一层的往回拼凑,最后执行的代码顺序还是和官网推荐的一样,只不过他用泛型T来让所有对象都适用