zoukankan      html  css  js  c++  java
  • 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来让所有对象都适用  
  • 相关阅读:
    venv(virtual environment)的使用
    Pytest 失败重运行机制
    Python 中方法和函数的区别
    手机移动端WEB资源整合
    Sass学习日志
    1、vue基础使用复习
    vscode配置笔记
    vue兼容IE浏览器、对低版本IE下的友好提示
    关闭eslint校验
    vue实现吸顶的效果
  • 原文地址:https://www.cnblogs.com/zhanglixina/p/9597641.html
Copyright © 2011-2022 走看看