ListView详细介绍与使用

前言介绍:

关于 我们大家都应该是非常的熟悉了,在 Android 开发中是经常用到的,今天就再来回顾一下, 的使用方法,和一些需要优化注意的地方,还有日常开发过程中的一些小技巧和经验。

ListView 简介

是 Android 系统为我们提供的一种列表显示的一种控件,使用它可以用来显示我们常见的列表形式。继承自抽象类 。

类的关系图:

表现形式

这就是一种最简单的 的表现形式,黑色框就是 控件,其中由一个个的 组成(红色框内容),然后可以通过向下滑动来查看很多的条目。

工作原理

仅是作为容器(列表),用于装载显示数据(就是上面的一个个的红色框的内容,也称为 item)。item 中的具体数据是由适配器(adapter)来提供的。

适配器(adapter):作为View(不仅仅指的 ListView)和数据之间的桥梁或者中介,将数据映射到要展示的View中。这就是最简单适配器模式,也是适配器的主要作用!

当需要显示数据的时候,ListView 会从适配器(Adapter)中取出数据,然后来加载数据。

ListView 负责以列表的形式向我们展示 Adapter 提供的内容

缓存原理

前面讲了 ListView 负责把 Adapter 提供的内容一一的展现出来,每一条数据对应一个item。试想如果把所有的数据信息全部加载到 ListView 上显示,加入这些数据有 100 条。那么 ListView 就要创建 100 个视图。如果有更多的数据,那么 ListView 就会创建更多的视图。这种行为显然是不可取的,这样会消耗大量的内容。

解决方案:

为了节省内存的占用,ListView 是不会为每一条数据创建一个视图的,而是采用了Recycler组件的方式。回收和复用 View。

那么是如何来复用的呢?

我们都知道一个屏幕可见的内容就是那么大,所以用户一次能看到的 item 就是固定的那么几个。假如当屏幕一次可以显示 x 个 item 时(不用是完整的),那么 ListView 会创建 x+1 个视图;当第1个 item 离开屏幕的时候,此时这个 item 的 View 就会被回收,再入屏的 item 的 View 就会优先从该缓存中获取。

只有 item 完全离开屏幕后才会复用,这也是为什么 ListView 要创建比屏幕需要显示视图多 1 个的原因:缓冲显示视图。

第 1 个 item 离开屏幕是有一个过程的,会有 1 个第一个 item 的下半部分 & 第 X+1 个 item 的上半部分同时在屏幕中显示的状态这种情况是没法使用缓存的 View 的。只能继续用新创建的视图 View。

实例演示:

假如屏幕一次只能显示 5 个 item,那么 ListView 会创建 (5+1)个 item 视图;当第 1 个 item 完全离开屏幕后才会回收至缓存,从而复用。(用于显示第 7 个 item)。

演示图来自网络:

具体使用

引入 ListView 和普通的 View 一样,直接在布局中添加 控件即可。

xml 中文件配置信息

AbsListView 常用属性和相关方法:

ListView 提供的 xml 属性

Adapter 简介

使用 ListView 的话就离不开 Adapter 了。

Adapter 本身是一个接口,Adapter 接口及其子类的继承关系如下图:

Adapter 接口派生了 ListAdapter 和 SpinnerAdapter 两个子接口

其中 ListAdapter 为 AbsAdapter 提供列表项,SpinnerAdapter 为 AbsSpinner 提供列表项

ArrayAdapter 、SimpleAdapter 都是 Android API 给我们提供好的适配器,直接使用即可,不过模式都已经写死了。

ArrayAdapter:简单、易用的 Adapter,用于将数组数据作为数据源绑定到列表项中。支持泛型操作

SimpleAdapter:相比 ArrayAdapter 来说,功能比较强大,可以将数据源的数据一一的绑定到 item 中的 view 中。

CursorAdapter:用于绑定游标(直接从数据库取出数据)作为列表项的数据源,和数据库有关系,不常用。

BaseAdapter:这个是我们在实际开发中经常用到的,我们需要继承 BaseAdapter 来自定义我们自己的适配器

常用适配器介绍与使用

ArrayAdapter

特定:使用简单、用于将数组、List 形式的数据绑定到列表中作为数据源,支持泛型操作

步骤:

在 xml 文件布局上实现 ListView

在 Activity 中定义数据源(列表或者数组)

构造 ArrayAdapter 对象,设置适配器

将 ListView 绑定到 ArrayAdapter 上

完事

具体实现:

添加 ListView

定义数据源

创建 ArrayAdapter 适配器

将 ArrayAdapter 适配器绑定到 ListView 上

使用 ArrayAdapter 的缺点

ArrayAdapter 使用起来非常简单,也就导致了功能实现非常局限,每个列表项只能是 TextView。可用的 item 布局要足够简单!

SimpleAdapter

相比 ArrayAdapter 来说,功能比较强大,可以将数据源的数据一一的绑定到 item 中的 view 中。

使用步骤:

在 xml 中添加 ListView

实现 item 布局(根据实际UI需求)

创建数据源(数据源形式有要求 List

创建 SimpleAdapter 适配器

将 SimpleAdapter 适配器绑定到 ListView 中

完事

具体实现

在 xml 中添加 ListView

实现 item 布局,这里我自己随便写了一个布局

创建数据源,使用 SimpleAdapter 的时候创建数据源很关键。

数据源的固定格式是 List> ,一般我们都这样写 List> ,当然 List 里面存放的一条一条的数据就是对应 itme 中的数据。如果 item 中的布局有点复杂的话,item 中的每个控件又需要设置不同的值,那么 item 中的每个布局的内容就又对应 HashMap 中的值了。

创建 SimpleAdapter

SimpleAdapter 的创建是非常容易和固定的,因为它就只有一个构造方法

将 SimpleAdapter 绑定到 ListView 中

BaseAdapter

我们在实际开发过程中接触最多的就是 了。可以最大程度的定制我们自己的 item。

实现步骤

在布局中添加 ListView

实现 item 布局(根据 ui 设计的)

创建数据源

创建自己的 Adapter 类 继承 BaseAdapter

创建自定义的 Adapter 类对象

将创建的适配器绑定到 ListView 上

具体实现步骤

布局中添加 ListView(就不再写代码了,和上面一样

实现 item 布局(依然使用 SimpleAdapter 中的 item 布局就可以了)

创建数据源

创建自己的 Adapter

}

重点讲解一下 BaseAdapter 中的这四个方法

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190827A0RDX000?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券