说明

ListView 组件用来以垂直滚动的显示View集合,配置方式如下:

1
2
3
4
<ListView
      android:id="@+id/list_view"
      android:layout_width="match_parent"
      android:layout_height="match_parent" />

ListView 实现动态数据展示

ListView 是一个 AdapterView,它不关心要显示的数据,只负责展示

ListView 显示的数据是交由 ListAdapter 进行处理,ListAdapter 本质是一个 Adapter,它是ListView和展示数据的桥,这样就可以实现内容与数据的分离

  1. BaseAdapter 抽象基类,自定义扩展都会继承这个类
  2. ArrayAdapter 支持泛型操作,实现最简单的展示一行文字
  3. SimpleAdapter 具有良好扩展性的Adapter,支持Map类型的List数据(List<Map>),支持自定义多种效果

重点关注一下 AdaptergetView 方法,它提供获取显示数据的View,这个View可以直接创建或者从XML layout中创建

实战

实现一个最简单的列表

最终效果

核心代码

ListView 容器layout

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >

    <ListView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/listView" />

</LinearLayout>

文件名为: list_item1

在线性布局下定义一个 ListView , 设置id为 listView

MainActivity 代码

1
2
3
4
5
6
7
8
9
private fun testListView1() {

    setContentView(R.layout.list_item1)
    val list = listOf("111", "222", "333", "444", "555")

    val adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, list)
    val listView = findViewById<ListView>(R.id.listView)
    listView.adapter = adapter
}

主要关注创建 ArrayAdapter 的代码,创建时需要的参数:

  1. context 当前的应用环境,这里面传的就是 MainActivity
  2. resouce layout资源id,此处传入的Android布局库提供的 layout.simple_list_item_1
  3. objects ListView中要显示的数据

创建完 adapter 后获取到 list_item1 布局中的 listView,然后将 listView 的 adapter 设置为刚创建的 adapter 进行数据的绑定

layout.simple_list_item_1 只配置了 TextView 组件