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

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


微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
在日常移动应用开发中,列表展示是最常见的交互场景之一。无论是消息列表、商品列表还是备忘录内容,都需要通过滚动视图来呈现大量数据。Android 平台提供了 ListView 控件来处理此类需求。本文将深入讲解 ListView 的工作原理,并通过一个'简易备忘录'案例,演示如何动态添加和展示数据。
ListView 显示数据的流程主要涉及三个部分:
ArrayAdapter,它负责将数据转换为可显示的视图。首先,我们创建一个简单的静态列表,展示一组水果名称。
使用线性布局包含标题和 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>
初始化数据并绑定适配器。
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 中。接下来,我们将实现一个具备输入功能的备忘录应用。用户可以输入文字,点击按钮添加到列表中。
我们需要一个标题提示、一个输入框(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",使其自动填充剩余空间。
在 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();
}
}
});
}
}
虽然 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. 等)*