Android基础——快速开发之打造万能适配器

这里以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来让所有对象都适用  
原文地址:https://www.cnblogs.com/zhanglixina/p/9597641.html