ListView 的简单使用及 ArrayAdapter 中参数详解

😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD,日常还会涉及Android开发工作。

如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。

😊 座右铭:不想当开发的测试,不是一个好测试✌️。

热衷分享,喜欢原创,如果觉得博主的文章还不错的话,还请点赞、收藏哦!👍

文章目录

  • 收获
  • [一 说在前面](#一 说在前面)
  • [二 ListView 的简单使用](#二 ListView 的简单使用)
  • [三 Demo 展示](#三 Demo 展示)

收获

通过本篇文章您将了解到 ListView 的基本用法及能够实现一段文本数据的纵向滑动,当然也会详细的了解适配器ArrayAdapter 的具体使用。

一 说在前面

ListView 是 Android 中最常用的控件之一,几乎所有的应用都会用到它,它是用来做什么的呢?由于手机屏幕空间比较有限,能一次性在屏幕上显示的内容并不多,当我们的程序中有大量数据需要展示的时候,就需要ListView控件来实现滑动。比如我们翻看QQ、微信聊天列表、翻阅微博最新消息等。所以 ListView 是用来做滑动控件内容的。

二 ListView 的简单使用

首先要在布局文件中增加 ListView 控件,属性无非就是 id、宽、高这些,不做过多解释。

xml 复制代码
<ListView
    android:id="@+id/listView"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</ListView>

在 MainActivity 中书写逻辑代码,首先我们把数据放在集合中,但是集合中的数据是无法直接传递给 ListView 的,我们需要借助适配器来完成,那么什么是适配器呢。可以查阅 Android 适配器这篇文章。

适配器是一种用于提供数据和管理视图展示的组件,适配器充当数据源与显示视图之间的桥梁,它负责将数据转换为适合显示在用户界面上的视图,并将用户界面上的操作反馈回数据源

逻辑代码如下:

kotlin 复制代码
class MainActivity : AppCompatActivity() {
    //private val data = arrayOf("Apple","Banana","Orange","Watermelon","Apple","Banana","Orange","Watermelon")
    private val data = listOf("Apple","Banana","Orange","Watermelon","Apple","Banana","Orange","Watermelon","Apple","Banana","Orange","Watermelon","Apple","Banana","Orange","Watermelon","Apple","Banana","Orange","Watermelon","Apple","Banana","Orange","Watermelon","Apple","Banana","Orange","Watermelon","Apple","Banana","Orange","Watermelon")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        // 核心代码
        setContentView(R.layout.activity_list_view)
        var listView: ListView = findViewById(R.id.listView)
        val adapter = ArrayAdapter(this,android.R.layout.simple_list_item_1,data)
        listView.adapter = adapter
        // 非透明状态栏
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.listView)) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }
    }
}

在 ArrayAdapter 的构造函数中依次传入 Activity 的实例,ListView 子项布局的id,以及数据源,为什么是这三个参数呢?主要还是看 ArrayAdapter 源码中的构造函数中的参数,具体代码如下所示:

java 复制代码
public ArrayAdapter(@NonNull Context context, int resource, @NonNull List<T> objects) {
        throw new RuntimeException("Stub!");
    }

在本文示例中,使用 android.R.layout.simple_list_item_1 作为 ListView 子项目布局的 id,这是一个 Android 内置的布局文件,里面只有一个 TextView ,可用于简单地显示一段文件。这样适配器就构建好了。

最后,还需要调用 ListView 的 setAdapter() 方法,将构建好的适配器对象传递进去,这样ListView和数据之间的关联就建立完成了。

java 复制代码
public void setAdapter(ListAdapter adapter) {
        throw new RuntimeException("Stub!");
    }

listView.adapter = adapter 是将适配器 adapter 设置为 ListView 控件的适配器,以便在 ListView 中显示数据。适配器负责将数据源中的每个项与视图进行绑定,并根据需要创建和重用视图,以确保在列表中显示正确的数据项。

三 Demo 展示

相关推荐
NRatel5 天前
Unity 中实现首尾无限循环的 ListView
unity·listview·无限循环·首尾循环
8931519601 个月前
Android开发Glide做毛玻璃效果
android·glide·android开发·android教程·glide做毛玻璃效果
浩宇软件开发1 个月前
Android开发,实现一个简约又好看的登录页
android·java·android studio·android开发
8931519602 个月前
Android开发融云获取多个会话的总未读数
android·android开发·android教程·融云获取多个会话的总未读数·融云未读数
8931519602 个月前
Android穿山甲banner广告穿插到项目的banner中
android·android开发·android教程·穿山甲banner广告加入项目
8931519602 个月前
Android开发检查是否是各大厂商手机的工具类
android·android开发·android教程·android检查手机厂商
8931519602 个月前
Android开发BasePagerAdapter
android·android开发·viewpager·android教程·viewpageradapte
8931519602 个月前
Android开发layer-list
android·android开发·android教程·layer-list·android启动页背景图
浩宇软件开发3 个月前
Androidstudio实现一个app引导页(超详细)
android·android studio·android开发
sitelist3 个月前
comctl32!ListView_OnSetItem函数分析LISTSUBITEM结构中的image表示图标位置
image·listview·comctl32·onsetitem·listsubitem