说明
ListView 组件用来以垂直滚动的显示View集合,配置方式如下:
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
ListView 实现动态数据展示
ListView 是一个 AdapterView,它不关心要显示的数据,只负责展示

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

- BaseAdapter 抽象基类,自定义扩展都会继承这个类
- ArrayAdapter 支持泛型操作,实现最简单的展示一行文字
- SimpleAdapter 具有良好扩展性的Adapter,支持Map类型的List数据(List<Map>),支持自定义多种效果
重点关注一下 Adapter 的 getView 方法,它提供获取显示数据的View,这个View可以直接创建或者从XML layout中创建

实战
实现一个最简单的列表
最终效果

核心代码
ListView 容器layout
<?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 代码
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 的代码,创建时需要的参数:
- context 当前的应用环境,这里面传的就是 MainActivity
- resouce layout资源id,此处传入的Android布局库提供的 layout.simple_list_item_1
- objects ListView中要显示的数据
创建完 adapter 后获取到 list_item1 布局中的 listView,然后将 listView 的 adapter 设置为刚创建的 adapter 进行数据的绑定
layout.simple_list_item_1 只配置了 TextView 组件