• Android中的适配器,你知道是做什么的吗?


    😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD,日常还会涉及Android开发工作。
    如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。 😊 座右铭:不想当开发的测试,不是一个好测试✌️。
    热衷分享,喜欢原创,如果觉得博主的文章还不错的话,还请点赞、收藏哦!👍

    番外
    对了,如果你需要算力,那么这篇文章一定对你有用哦!东方国信“幕僚智算”算力云

    一 收获

    通过本篇文章您将了解到 Android 中适配器Adapter)的作用、常见适配器实例及适配器的简单使用。

    二 适配器简介

    适配器是一种用于提供数据和管理视图展示的组件,适配器充当数据源与显示视图之间的桥梁,它负责将数据转换为适合显示在用户界面上的视图,并将用户界面上的操作反馈回数据源。
    适配器在许多 UI 组件中起到重要的作用,最常见的是在 ListViewRecyclerViewSpinner 等控件中使用。

    三 适配器的主要职责

    适配器的主要职责包括以下几个方面:

    1. 数据绑定:适配器负责将数据源中的数据与视图进行绑定。它将数据源中的每个项(例如,列表中的一项)与视图的子项进行关联。
    2. 创建视图:适配器负责根据定义的布局文件创建视图。它会根据数据源的项数动态创建视图,并为每个视图设置相应的数据。
    3. 视图重用:为了提高性能和节省内存,适配器会利用视图的重用机制。当滚动列表或回收视图时,适配器会重用之前创建的视图,而不是每次都创建新的视图。
    4. 提供数据数量:适配器会告知 UI 组件有多少个数据项需要展示。这个信息用于确定 UI 组件的大小和滚动范围。
    5. 事件处理:适配器可以处理用户与视图的交互事件,例如点击列表项或选择下拉列表中的项,并在事件发生时更新数据源。

    四 Android中适配器的实现类

    1. ArrayAdapter:用于将数据与 ListView 或 Spinner 组件进行绑定的适配器。它使用数组或列表作为数据源,并将每个数据项与系统提供的默认布局(例如 android.R.layout.simple_list_item_1)进行绑定。
    2. BaseAdapter:这是一个抽象类,提供了实现自定义适配器的基本骨架。继承 BaseAdapter 可以实现更灵活和自定义的适配器。它需要开发人员自行实现一些方法,如 getViewgetCountgetItemgetItemId 等。
    3. RecyclerView.Adapter:用于将数据与 RecyclerView 组件进行绑定的适配器。RecyclerView 是一个更灵活和高度可定制的列表视图,适配器是实现 RecyclerView 的关键组件。RecyclerView.Adapter 需要开发人员自行实现一些方法,如 onCreateViewHolderonBindViewHoldergetItemCount 等。
    4. PagerAdapter:用于将数据与 ViewPager 组件进行绑定的适配器。ViewPager 是一个可滑动的视图容器,PagerAdapter 用于提供 ViewPager 的页面内容。PagerAdapter 需要开发人员自行实现一些方法,如 instantiateItemdestroyItemgetCount 等。

    五 适配器的简单使用

    根据不同的 UI 组件和需求,Android 提供了各种类型的适配器的实现类,,例如 ArrayAdapterBaseAdapterRecyclerView.Adapter 等。当使用 Kotlin 实现 Android 中的适配器时,可以通过继承现有的适配器类或实现适配器接口来创建自定义适配器。

    import android.content.Context
    import android.view.LayoutInflater
    import android.view.View
    import android.view.ViewGroup
    import android.widget.ArrayAdapter
    import android.widget.TextView
    
    class CustomAdapter(context: Context, private val data: List<String>) :
        ArrayAdapter<String>(context, 0, data) {
    
        override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
            var itemView = convertView
            if (itemView == null) {
                itemView = LayoutInflater.from(context).inflate(R.layout.list_item_layout, parent, false)
            }
    
            val fruitNameTextView = itemView?.findViewById<TextView>(R.id.fruitNameTextView)
            fruitNameTextView?.text = data[position]
    
            return itemView!!
        }
    }
    

    解析:
    创建了一个名为 CustomAdapter 的自定义适配器类,它继承了ArrayAdapter 类,并重写 getView 方法,这是适配器中的一个关键方法,用于设置每个列表项的布局和数据。

    getView 方法中,首先获取或创建一个 itemView,它是每个列表项的根视图。然后,我们通过调用 findViewById 来获取到自定义布局中的 TextView 控件,并将对应列表项的数据设置到 TextView 中。最后,我们返回 itemView

    val fruits = listOf("Apple", "Banana", "Orange", "Watermelon")
    val adapter = CustomAdapter(this, fruits)
    listView.adapter = adapter
    

    请注意,CustomAdapter 类继承自 ArrayAdapter,并将数据源 data 传递给父类的构造函数。

    对于适配器的具体使用可参考 ListView 或者 RecyclerView 相关文章。

  • 相关阅读:
    visual studio 2017安装完成后,编译c++项目失败,提示E696,无法打开ctype.h errno.h float.h stdio.h
    【kubernetes】从kubernetes Dashboard的yaml文件看应用的部署
    【华为OD机试真题 JAVA】贪吃蛇
    ubuntu 22.04 安装最新版本的 nodejs
    【数据结构笔记06】数据结构之队列的顺序表示和实现(普通队列、循环队列)
    测量学4_距离测量
    注解案例:山寨Junit与山寨JPA
    Win11任务栏太宽了怎么变窄?Win11任务栏宽度调整方法
    MySQL主从复制时出现的一些问题以及解决方法
    打印lua输出日志
  • 原文地址:https://blog.csdn.net/weixin_42182599/article/details/140112563