icode icode
首页
  • Android学习

    • 📁基础内容
    • 📺AndroidCore
    • 🎨Android-UI
    • 🏖️Components
    • 📊Fragment
    • 🔗网络操作
    • 🔏异步机制
    • 📦数据存储
    • 🗃️Gradle
  • 学习笔记

    • 『框架』笔记
    • 『Kotlin』笔记
    • 《Vue》笔记
    • 《Git》学习笔记
    • 『Bug踩坑记录』
  • ListView
  • RecyclerView
  • ViewPager
  • Java笔记

    • 🟠JavaSE
    • 🟢JavaWeb
    • 🔴JavaEE
    • ⚪JavaTopic
    • 🍳设计模式
  • 计算机基础

    • 📌计算机网络
    • 🔍数据结构
    • 📦数据库
    • 💻OS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 关于

    • 📫关于我
  • 收藏

    • 网站
    • 资源
    • Vue资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

iqqcode

保持对技术的探索实践与热爱
首页
  • Android学习

    • 📁基础内容
    • 📺AndroidCore
    • 🎨Android-UI
    • 🏖️Components
    • 📊Fragment
    • 🔗网络操作
    • 🔏异步机制
    • 📦数据存储
    • 🗃️Gradle
  • 学习笔记

    • 『框架』笔记
    • 『Kotlin』笔记
    • 《Vue》笔记
    • 《Git》学习笔记
    • 『Bug踩坑记录』
  • ListView
  • RecyclerView
  • ViewPager
  • Java笔记

    • 🟠JavaSE
    • 🟢JavaWeb
    • 🔴JavaEE
    • ⚪JavaTopic
    • 🍳设计模式
  • 计算机基础

    • 📌计算机网络
    • 🔍数据结构
    • 📦数据库
    • 💻OS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 关于

    • 📫关于我
  • 收藏

    • 网站
    • 资源
    • Vue资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • ListView

    • 适配器模式
    • 认识ListView
      • 1. ListView理解
        • 常用属性
      • 2. ListView工作原理
        • 本质原理
        • 缓存原理
      • 3. ListView的基本属性
        • 生成方式
        • xml文件配置信息
    • Adapter
    • ViewHolder
    • 自定义Adapter
    • ListView的点击事件
  • RecyclerView

  • ViewPager

  • Component
  • ListView
iqqcode
2021-06-02
目录

认识ListView

# 1. ListView理解

ListView是一种用来 显示多个可滑动项『item』列表 的 ViewGroup

image-20210315103752972

显示列表:mListView.setAdapter(adapter)

需要使用 Adapter 将 集合数据 和每一个 item所对应的布局 动态适配至ListView中显示

image-20210315104555156

ListView继承关系

ArrayAdapter、SimpleAdapter、SimpleCursorAdapter也是继承自BaseAdapter

image-20210315093932792

Adapter

  • BaseAdapter:显示复杂的列表,集合数据可以是任意类型List<Xxx>
  • ArrayAdapter:显示文本列表,集合数据为List<String>或String[]
  • SimpleAdapter:显示复杂列表,数据集合必须是List<Map<String,Object>>类型
  • SimpleCursorAdapter:显示复杂类表,集合数据是数据库查询的结果集

image-20210315094654545


# 常用属性

属性名称 说明
divider 设置 分割线 的颜色
dividerHeight 设置 分割线 的高度
scrollbars 设置 滚动条 的隐藏或显示
fadeScrollbars 设置 滚动条 的自动隐藏或显示
entries 引用一个将使用在此ListView里的数组。若数组是固定的,使用此属性将比在程序中写入更为简单



# 2. ListView工作原理

# 本质原理

  • ListView仅作为容器(列表),用于 装载 & 显示数据(即列表项item)
  • 而容器内的具体数据(列表项item)则是由 适配器(Adapter)提供

适配器(Adapter):作为View 和 数据 之间的桥梁中介,将数据映射到要展示的View中

  • 当需显示数据时,ListView会向Adapter取出数据,从而加载显示,具体如下图

img

结论:ListView负责以列表的形式显示Adapter提供的内容

# 缓存原理

试想一个场景:若把所有数据集合的信息都加载到ListView上显示,若 ListView要为每个数据都创建一个视图,那么会占用非常多的内存

  • 为了节省空间和时间,ListView不会为每一个数据创建一个视图,而是采用了Recycler组件,用于回收 & 复用 View
  • 当屏幕需显示x个Item时,那么ListView会创建 x+1个视图;当第1个Item离开屏幕时,此Item的View被回收至缓存,入屏的Item的View会优先从该缓存中获取

注意:

  1. 只有Item完全离开屏幕后才可复用,这也是为什么ListView要创建比屏幕需显示视图多1个的原因:缓冲 显示视图
  2. 即:第1个Item离开屏幕是有过程的,会有1个 第1个Item的下半部分 & 第8个Item上半部分同时在屏幕中显示的状态,此时仍无法使用缓存的View,只能继续用新创建的视图View
  • 实例演示 设:屏幕只能显示5个Item,那么ListView只会创建(5+1)个Item的视图;当第1个Item完全离开屏幕后才会回收至缓存从而复用(用于显示第7个Item)

img

# 3. ListView的基本属性

# 生成方式

生成列表视图(ListView)的方式主要有两种:

  • 直接用ListView进行创建
  • 让Activity继承ListActivity

# xml文件配置信息

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   
    xmlns:tools="http://schemas.android.com/tools"   
    android:layout_width="match_parent"   
    android:layout_height="match_parent"   
    android:background="#FFE1FF"   
    android:orientation="vertical" >   
    <ListView   
        android:id="@+id/listView1"   
        android:layout_width="match_parent"   
        android:layout_height="match_parent" />   
</LinearLayout>  
1
2
3
4
5
6
7
8
9
10
11

AbsListView的常用属性和相关方法:

属性 说明 备注
android:choiceMode 列表的选择行为,默认:none没有选择行为 选择方式: none:不显示任何选中项 singleChoice:允许单选multipleChoice:允许多选multipleChoiceModal:允许多选 (把Activity里面adapter的第二个参数改成支持选择的布局)
android:drawSelectorOnTop 如果该属性设置为true,选中的列表项将会显示在上面
android:listSelector 为点击到的Item设置图片 如果该属性设置为true,选中的列表项将会显示在上面
android:fastScrollEnabled 设置是否允许快速滚动 如果该属性设置为true,将会显示滚动图标,并允许用户拖动该滚动图标进行快速滚动。
android:listSelector 指定被选中的列表项上绘制的Drawable
android:scrollingCache 滚动时是否使用缓存 如果设置为true,则在滚动时将会使用缓存
android:stackFromBottom 设置是否从底端开始排列列表项
android:transcriptMode 指定列表添加新的选项的时候,是否自动滑动到底部,显示新的选项。 disabled:取消transcriptMode模式;默认的normal:当接受到数据集合改变的通知,并且仅仅当最后一个选项已经显示在屏幕的时候,自动滑动到底部。 alwaysScroll:无论当前列表显示什么选项,列表将会自动滑动到底部显示最新的选项。

Listview提供的XML属性:

XML属性 说明 备注
android:divider 设置List列表项的分隔条(可用颜色分割,也可用图片(Drawable)分割 不设置列表之间的分割线,可设置属性为@null
android:dividerHeight 用于设置分隔条的高度
android:background属性 设置列表的背景
android:entries 指定一个数组资源,Android将根据该数组资源来生成ListView
android:footerDividerEnabled 如果设置成false,则不在footer View之前绘制分隔条
andorid:headerDividerEnabled 如果设置成false,则不再header View之前绘制分隔条


[1]Carson_Ho.Android:ListView与AdapterView全面解析[EB/OL].https://www.jianshu.com/p/4e8e4fd13cf7.

编辑 (opens new window)
上次更新: 2021/06/02, 10:01:48
适配器模式
Adapter

← 适配器模式 Adapter→

最近更新
01
匿名内部类
10-08
02
函数式接口
10-08
03
ARouter-Kotlin踩坑
10-05
更多文章>
Theme by Vdoing | Copyright © 2021-2023 iqqcode | MIT License | 备案号-京ICP备2021028793号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×