跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Java大前端java

Android 开发:基于 ListView 实现简易备忘录

综述由AI生成Android 开发中 ListView 是展示列表数据的核心控件。 ListView 的基本原理,包括数据源、Adapter 适配器和视图容器的关系。通过静态水果列表和动态备忘录两个实例,演示了如何使用 ArrayAdapter 绑定数据、动态添加条目以及处理用户输入。此外,补充了 ViewHolder 优化模式和点击事件监听,并对比了现代推荐使用的 RecyclerView 控件,帮助开发者掌握列表展示的最佳实践。

霸天发布于 2025/2/6更新于 2026/5/3017 浏览
Android 开发:基于 ListView 实现简易备忘录

Android 列表控件 ListView 详解与实战

在日常移动应用开发中,列表展示是最常见的交互场景之一。无论是消息列表、商品列表还是备忘录内容,都需要通过滚动视图来呈现大量数据。Android 平台提供了 ListView 控件来处理此类需求。本文将深入讲解 ListView 的工作原理,并通过一个'简易备忘录'案例,演示如何动态添加和展示数据。

ListView 核心原理

ListView 显示数据的流程主要涉及三个部分:

  1. 数据源:通常使用数组(Array)或集合(List)存储待展示的数据。
  2. 适配器(Adapter):作为数据与视图之间的桥梁。最常用的是 ArrayAdapter,它负责将数据转换为可显示的视图。
  3. 视图容器:即 ListView 本身,负责渲染由适配器提供的视图。

基础示例:静态水果列表

首先,我们创建一个简单的静态列表,展示一组水果名称。

布局文件 (activity_main.xml)

使用线性布局包含标题和 ListView 控件。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="水果列表展示"
        android:gravity="center_horizontal"
        android:textSize="24sp" />

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

</LinearLayout>
活动代码 (MainActivity.java)

初始化数据并绑定适配器。

public class MainActivity extends AppCompatActivity {

    String[] fruits = {"Apple", "Banana", "Orange", "Watermelon", "Pear", 
                       "Grape", "Pineapple", "Cherry", "Mango"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        // 创建适配器,传入上下文、布局资源 ID 和数据源
        ArrayAdapter<String> adapter = new ArrayAdapter<>(
            this, android.R.layout.simple_list_item_1, fruits);
            
        ListView listView = findViewById(R.id.list_view);
        listView.setAdapter(adapter);
    }
}

关键点说明:

  • android.R.layout.simple_list_item_1 是系统内置的简单文本布局,仅包含一个 TextView。
  • setAdapter() 方法将数据流注入到 ListView 中。

进阶实战:动态备忘录功能

接下来,我们将实现一个具备输入功能的备忘录应用。用户可以输入文字,点击按钮添加到列表中。

1. 界面布局设计

我们需要一个标题提示、一个输入框(EditText)、一个添加按钮(Button)以及底部的列表区域。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="请输入备忘录内容"
        android:gravity="center"
        android:textAlignment="center"
        android:textSize="24sp" />

    <EditText
        android:id="@+id/edit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="编辑..." />

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="添加到备忘录" />

    <ListView
        android:id="@+id/list_view"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
    </ListView>

</LinearLayout>

注意:ListView 的高度设置为 0dp 并配合 layout_weight="1",使其自动填充剩余空间。

2. 逻辑实现

在 Activity 中获取控件引用,设置监听器,并在点击时更新数据。

public class MainActivity extends AppCompatActivity {
    private EditText ed;
    private Button button;
    private ArrayAdapter<String> adapter;
    private ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 初始化控件
        button = findViewById(R.id.button);
        ed = findViewById(R.id.edit);
        listView = findViewById(R.id.list_view);

        // 初始化适配器(不传数据源,后续动态添加)
        adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1);
        listView.setAdapter(adapter);

        // 预设一些初始数据
        adapter.add("看电影");
        adapter.add("听歌");
        adapter.add("看书");

        // 设置按钮点击事件
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String text = ed.getText().toString();
                if (!text.isEmpty()) {
                    adapter.add(text); // 添加到适配器
                    ed.setText("");    // 清空输入框
                } else {
                    Toast.makeText(MainActivity.this, "内容不能为空", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}

性能优化:ViewHolder 模式

虽然 ArrayAdapter 简化了开发,但在处理复杂列表项时,直接调用 findViewById 会导致性能问题。Android 引入了 ViewHolder 模式来缓存子视图。

对于自定义布局,建议继承 BaseAdapter 并重写 getView 方法,利用 convertView 进行复用。如果继续使用 ArrayAdapter,需注意其内部已做了部分优化,但自定义布局仍需关注复用机制。

交互增强:点击事件

除了添加数据,用户往往需要点击列表项查看详情或执行操作。我们可以通过 setOnItemClickListener 实现。

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        String item = (String) parent.getItemAtPosition(position);
        Toast.makeText(MainActivity.this, "选中:" + item, Toast.LENGTH_SHORT).show();
    }
});

总结与现代替代方案

本文详细讲解了 Android ListView 的基础用法及动态数据绑定。通过 ArrayAdapter 可以快速实现列表展示,结合 EditText 和 Button 可实现交互式备忘录。

需要注意的是,随着 Android 版本演进,Google 官方推荐使用 RecyclerView 替代 ListView。RecyclerView 提供了更灵活的布局管理器和更好的性能控制。在实际新项目开发中,建议优先学习 RecyclerView,但理解 ListView 的原理对于掌握 Android 列表机制依然至关重要。


(注:文中代码片段需确保导入必要的包,如 android.widget. 等)*

目录

  1. Android 列表控件 ListView 详解与实战
  2. ListView 核心原理
  3. 基础示例:静态水果列表
  4. 布局文件 (activity_main.xml)
  5. 活动代码 (MainActivity.java)
  6. 进阶实战:动态备忘录功能
  7. 1. 界面布局设计
  8. 2. 逻辑实现
  9. 性能优化:ViewHolder 模式
  10. 交互增强:点击事件
  11. 总结与现代替代方案
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • PUBG 压枪宏配置教程:Logitech 鼠标自动识别与参数设置
  • Stable Diffusion 视觉提示词注入攻击原理与实现分析
  • Ubuntu 22.04 基于 ROS2 Humble 搭建 PX4 无人机仿真环境 (含 Micro XRCE-DDS)
  • Java 实现百度地图 SN 权限签名:搜索 2.0 接口实战
  • DeepSeek 各版本说明与优缺点分析
  • Stable Diffusion 的 3 个主流替代方案
  • AI 提示词技巧:控制输出格式为 Markdown、HTML 与 LaTeX
  • Linux 基础指令与权限管理详解
  • 《人工智能的底层逻辑》:清华大学 AI 通识经典解析
  • VS Code Java 扩展报错需 JDK 21 的解决方案
  • PowerShell 中 Invoke-WebRequest 的正确使用:避免参数匹配错误
  • WorkBuddy 使用指南:从零开始配置 QQ 机器人,解锁桌面智能体新玩法
  • 微服务项目在线 OJ 系统基于 Java Spring 的 Token 与身份认证实现
  • AMD 显卡 llama.cpp 部署指南及兼容性优化方案
  • VS2022 无法使用 GitHub Copilot 的排查与解决
  • GitHub Copilot 订阅取消指南
  • Ubuntu 双系统下 NVIDIA 显卡驱动安装指南
  • OpenClaw 多 Agent 多 Discord 频道配置实战:从零搭建 AI 团队
  • C++ RAII 与智能指针详解
  • DIY 无人机电源管理:升压与降压电路设计

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online