安卓编程基础——列表

article/2025/9/20 21:17:51

零、本讲学习目标

理解列表视图的四大组成元素
能使用基于数组适配器的列表视图
能使用基于简单适配器的列表视图
能使用基于基适配器的列表视图

一、导入新课

列表视图是基于适配器的供用户从多个选项中进行选择控件,可以通过滑动显示很多列表项。

二、新课讲解

(一)列表视图概述

1、继承关系图

列表视图(ListView)继承了抽象列表视图(AbsListView),而抽象列表视图又继承了适配器视图(AdapterView)。适配器视图具有共同的特征,就是利用适配器将数据源与展示控件绑定起来。

2、列表视图API文档

  • ListView  |  Android Developers

 

3、列表视图四要素

要素说明
列表控件显示多项供用户选择
适配器数组适配器、简单适配器、游标适配器、基适配器
数据源数组、数组列表、游标……
列表项模板平台资源、用户自定义

列表视图四要素:列表控件、适配器、列表项模板和数据源

4、四种常用适配器

  • 列表视图(ListView),它是AdapterView的孙子类,要通过适配器作为梁桥来绑定数据源
适配器含义
ArrayAdapter数组适配器
SimpleAdapter简单适配器
SimpleCursorAdapter简单游标适配器
BaseAdapter基适配器

(二)数组适配器

1、数组适配器API文档

  • ArrayAdapter  |  Android Developers

 

2、数据适配器继承关系图

  • ArrayAdapter类继承了BaseAdapter类

 

3、数组适配器构造方法

  • 数组适配器提供了6个重载的构造方法

(三)数组适配器案例 - 阅读古诗

1、创建安卓应用

  • 基于Empty Activity模板创建安卓应用 - ReadAncientPoetry

   单击【Finish】按钮

2、准备图片素材

  • 将背景图片拷贝到drawable目录

3、字符串资源文件

  • 字符串资源文件 - strings.xml
<resources><string name="app_name">阅读古诗</string><string name="back">返回古诗目录</string><string-array name="titles"><item>静夜思</item><item>登鹳雀楼</item><item>相思</item><item>听弹琴</item><item>登乐游原</item><item>朝发白帝城</item><item>巴山夜雨</item><item>渭城曲</item><item>春夜喜雨</item><item>离离原上草</item><item>示儿</item></string-array><string-array name="authors"><item>唐·李白</item><item>唐·王之涣</item><item>唐·王维</item><item>唐·刘长卿</item><item>唐·李商隐</item><item>唐·李白</item><item>唐·杜牧</item><item>唐·王维</item><item>唐·杜甫</item><item>唐·白居易</item><item>宋·陆游</item></string-array><string-array name="contents"><item>床前明月光,\n疑是地上霜。\n举头望明月,\n低头思故乡。</item><item>白日依山尽,\n黄河入海流。\n欲穷千里目,\n更上一层楼。</item><item>红豆生南国,\n春来发几枝。\n愿君多采撷,\n此物最相思。</item><item>泠泠七弦上,\n静听松风寒。\n古调虽自爱,\n今人多不弹。</item><item>向晚意不适,\n驱车登古原。\n夕阳无限好,\n只是近黄昏。</item><item>朝辞白帝彩云间,\n千里江陵一日还。\n两岸猿声啼不住,\n轻舟已过万重山。</item><item>君问归期未有期,\n巴山夜雨涨秋池。\n何当共剪西窗烛,\n却话巴山夜雨时。</item><item>渭城朝雨浥轻尘,\n客舍青青柳色新。\n劝君更尽一杯酒,\n西出阳关无故人。</item><item>好雨知时节,当春乃发生。\n随风潜入夜,润物细无声。\n野径云俱黑,江船火独明。\n晓看红湿处,花重锦官城。</item><item>离离原上草,一岁一枯荣。\n野火烧不尽,春风吹又生。\n远芳侵古道,晴翠接荒城。\n又送王孙去,萋萋满别情。</item><item>死去元知万事空,\n但悲不见九州同。\n王师北定中原日,\n家祭无忘告乃翁。 </item></string-array>
</resources>

4、主布局资源文件

  • 主布局资源文件 - activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<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="@drawable/background"android:padding="15dp"tools:context=".MainActivity"><ListViewandroid:id="@+id/lv_poem_title"android:layout_width="match_parent"android:layout_height="wrap_content" />
</LinearLayout>

5、创建诗歌列表项模板

  • 诗歌列表项模板 - poem_list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tv_poem_title"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:minHeight="80dp"
    android:textColor="#0000ff"
    android:textSize="25sp" />

 

6、主界面类实现功能

  • 主界面类 - MainActivity

 初始化古诗标题数组,作为列表控件的数据源

创建数组适配器,作为连接列表控件与数据源的桥梁

 查看平台布局资源文件simple_list_item_1

给列表控件设置适配器
 

package net.hw.read_ancient_poetry;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends AppCompatActivity {

    private ListView lvPoemTitle; // 诗歌标题列表控件 - 展示
    private ArrayAdapter<String> adapter; // 数组适配器 - 桥梁
    private String[] titles; // 诗歌标题数组 - 数据源

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 利用布局资源文件设置用户界面
        setContentView(R.layout.activity_main);

        // 通过资源标识符获取控件实例
        lvPoemTitle = findViewById(R.id.lv_poem_title);

        // 初始化古诗标题数组,作为列表控件的数据源
        titles = getResources().getStringArray(R.array.titles);
        // 给古诗标题填上序号
        for (int i = 0;  i < titles.length; i++) {
            titles[i] = (i + 1) + ". " + titles[i];
        }

        // 创建数组适配器,作为连接列表控件与数据源的桥梁
        adapter = new ArrayAdapter<>(
                this, // 上下文 - 当前窗口
                android.R.layout.simple_list_item_1, // 列表项模板 - 平台布局资源
                titles // 数据源 - 字符串数据组
        );

        // 给列表控件设置适配器
        lvPoemTitle.setAdapter(adapter);
    }
}
 

7、启动应用,查看效果

  • 采用平台资源中的列表项模板得到的效果

 


http://chatgpt.dhexx.cn/article/VT5IgT5K.shtml

相关文章

安卓编程基础——标签

目录 前言 &#xff08;一&#xff09;继承关系图 &#xff08;二&#xff09;标签常用属性 &#xff08;三&#xff09;教学案例&#xff1a;标签演示 1、创建安卓应用 2、字符串资源文件 3、自定义边框配置文件 4、主布局资源文件 5、主界面类实现功能 6、启动应用&a…

安卓编程基础——菜单

前言&#xff1a;学习目标 知道三种菜单使用场景能够正确使用三种菜单 一、新课讲解 菜单在安卓应用程序中占有比较重要的位置。原生安卓提供了三种类型的菜单&#xff1a;选项菜单&#xff08;OptionsMenu&#xff09;、上下文菜单&#xff08;ContextMenu&#xff09;和子菜…

安卓并发编程基础

1.线程 1.线程与进程的区别。 进程是程序运行和资源分配的基本单位&#xff0c;一个程序至少有一个进程&#xff0c;一个进程至少有一个线程。进程在执行过程中拥有独立的内存单元&#xff0c;而多个线程共享内存资源&#xff0c;减少切换次数&#xff0c;从而效率更高。线程是…

【安卓开发】安卓网络编程

目录 一、安卓Socket客户端二、安卓Socket客户端优化&#xff08;小车遥控器拓展&#xff09;三、Android非UI线程修改空间程序崩溃问题一种新的解决办法&#xff1a;Handler类&#xff08;倒计时软件&#xff09; 四、Android网络接收数据并刷新界面&#xff08;综合练习&…

storm-executor-spout(2)

2121SCSDUSC storm-executor-spout&#xff08;2&#xff09; 用一个spout读取Twitter数据。采用拓扑并行化&#xff0c;多个spout从同一个流读取数据的不同部分。如果有多个流要读取&#xff0c;可以在任意组件内&#xff08;spouts/bolts&#xff09;访问TopologyContext。…

php读取excel效率,PhpSpreadsheet VS Box\Spout读取excel性能对比

phpspreadsheet版本:1.5.0 spout版本:2.7.3 在同样的环境下,运行代码,spout的在内存使用和时间花费上都占优,在phpspreadsheet读取失败的文档spout依然能正确完成读取。 spout代码 ini_set(memory_limit, 2G); var_dump(memory_get_usage()); var_dump(microtime()); $loa…

KafkaSpout 浅析

最近在使用storm做一个实时计算的项目,Spout需要从 KAFKA 集群中读取数据&#xff0c;为了提高开发效率&#xff0c;直接使用了Storm提供的KAFKA插件。今天抽空看了一下KafkaSpout的源码&#xff0c;记录下心得体会。 KafkaSpout基于kafka.javaapi.consumer.SimpleConsumer实现…

storm trident的多数据流,多spout

storm trident的多数据流&#xff0c;多spout (STORM)[storm, kafka] storm可以使用接收多个spout作为数据源&#xff0c;core storm与trident均可以&#xff0c;本文主要介绍trident的用法。 在trident中设置多个spout的基本思路是先建立多个spout&#xff0c;然后分别创建…

storm学习笔记(二)——Storm组件详解之Tuple、Spout

目录 Tuple元组 结构 生命周期 Spout数据源 结构 开发spout组件 Storm的核心概念包括&#xff1a;Stream、Spout、Bolt、Tuple、Task、Worker、Stream Grouping、Topology Stream是被处理的数据&#xff0c;Spout是数据源&#xff0c;Bolt是处理数据的容器&#xff0c;T…

java 纳秒 格式化_Java日期时间API系列35-----Jdk8中java.time包中的新的日期时间API类应用,微秒和纳秒等更精确的时间格式化和解析。...

通过Java日期时间API系列1-----Jdk7及以前的日期时间类中得知,Java8以前除了java.sql.Timestamp扩充纳秒,其他类最大只精确到毫秒;Java8 time包所有相关类都支持纳秒。下面是示意图: 图中的nano 是 一秒钟包含的纳秒值,0到999999999。毫秒,微秒和纳秒都是通过这个值计算得…

c语言计时程序 纳秒,前端Tips#4 - 用 process.hrtime 获取纳秒级的计时精度

视频讲解 文字讲解 如果去测试代码运行的时长&#xff0c;你会选择哪个时间函数&#xff1f; 一般第一时间想到的函数是 Date.now 或 Date.getTime。 1、先讲结论 之所以这么选&#xff0c;是基于 精度 和 时钟同步 两方面考虑的。 2、知识讲解 首先看一下 Date.now 的缺点 返回…

纳秒时代

1978年在英特尔公司的历史中是很不平凡的一年。这一年它满10岁了&#xff0c;员工数首次超过1万人。这一年&#xff0c;它卖掉了竞争激烈的电子表&#xff08;digital watch&#xff09;业务。最重要的是&#xff0c;在这一年6月&#xff0c;它推出了具有跨时代意义的8086芯片。…

linux内核纳秒精度时间,Linux时钟精度:毫秒?微妙?纳秒?

最近被内核时钟精度弄的很是郁闷。具体情况如下&#xff1a; 扫盲&#xff1a;1秒1000毫秒1000000微妙1000000000纳秒 首先&#xff1a;linux有一个很重要的概念——节拍&#xff0c;它的单位是(次/秒)。2.6内核这个值是1000&#xff0c;系统中用一个HZ的宏表征这个值。同时有全…

java 日期 纳秒_java8 ZonedDateTime 日期精度到纳秒

1秒 10E3毫秒 10E6 微妙 10E9 纳秒 使用java8 Instant 内部实际System.currentTimeMillis() 在模型上 可输出纳秒数据 重点是模型 时间戳转日期 public static ZonedDateTime ofInstant(Instant instant, ZoneId zone) { Objects.requireNonNull(instant, "instant&qu…

第九章:NAT(网络地址转换协议)

文章目录 一、NAT1、NAT介绍①公有网络地址②私有网络地址 2、NAT工作原理3、NAT功能 二、NAT的实现方式1、静态转换&#xff08;static Translation&#xff09;实验对比 2、动态转换2.1 ACL&#xff08;访问控制列表&#xff09;2.2 配置动态NAT实验效果 3、端口多路复用3.1 …

【NAT网络地址转换(私网公网地址、静态NAT、动态NAT、NAPT、Easy IP、NAT Server)】-20211215、20211216

目录 一、NAT产生背景 1.产生背景 2.私网地址、公网地址​ 私网IP地址&#xff0c;既可以一定上缓解ip的不足&#xff0c;在私网里&#xff0c;ip地址可以随意使用。 公网地址&#xff0c;在需要访问公网时&#xff0c;运用网络地址转换NAT技术&#xff0c;可以实现。 二…

什么是私网,公网?

我们常说的内网和外网&#xff0c;通常是相对于防火墙而言的&#xff0c;在防火墙内部叫做内网&#xff0c;反之就是外网。 在一定程度上外网等同于公网&#xff0c;内网等同于私网。公网地址 公网地址是指在因特网上直接可达的地址&#xff0c;如果你有一个公网地址&#xff0…

NAT——公私网地址转换

NAT—网络地址转换 NAT NAT又称为网络地址转换&#xff0c;用于实现私有网络和公有网络之间的转换 私有和公有网络地址 公有网络地址是指互联网上全球唯一的IP地址 私有网络地址是指内部网络或者主机的IP地址 IANA&#xff08;互联网数字分配机制&#xff09;规定将下列的IP地…

公网地址和私网地址问题

服务器映射用于将内网服务器的私网地址映射为公网地址&#xff0c;供Internet用户访问。选择“静态映射”类型可以将每一台服务器映射成一个独立的公网IP地址。“服务器负载均衡”类型可以将多台服务器映射成同一个公网地址&#xff0c;Internet用户在访问这个公网地址时&#…

私网地址与Internet地址

一、A、B、C三类地址 可用地址范围备注A类1.0.0.1-126.255.255.254B类128.1.0.1-191.255.255.254C类192.0.1.1-223.255.255.254D类224.0.0.1-239.255.255.254D类为多播地址 说明&#xff1a; 1. 每一个地址都是用网络位主机位组成的。 2. 全0的和全1的网络位和主机位都要去掉…