ListView和Adapter数据适配器介绍
封面图
•
2025-10-20
•
Android开发
159
0
0
0
在 Android 开发中,`ListView` 和 `Adapter` 是用于展示数据列表的核心组件。它们配合使用,使得开发者能够灵活地将数据动态地展示在界面上。 --- ## 一、`ListView` 简介 `ListView` 是 Android 中用于显示**可滚动的列表项**的控件。它可以动态加载大量数据,并且支持滑动查看,非常适合用来展示如联系人列表、新闻列表、商品列表等。 ### 主要特点: - 支持垂直滚动 - 可以自定义每一项的布局 - 支持点击事件 - 可以处理长按事件 ### 常用方法: | 方法 | 说明 | |------|------| | `setAdapter(Adapter adapter)` | 设置适配器 | | `getItemAtPosition(int position)` | 获取指定位置的数据项 | | `getCount()` | 获取列表项的数量 | --- ## 二、`Adapter`(适配器)简介 `Adapter` 是一个桥梁,负责将数据与 `ListView` 进行绑定。它告诉 `ListView` 如何将数据转换为视图(View),并管理这些视图的显示和更新。 ### 常见的 Adapter 类型: | Adapter 类型 | 用途 | |--------------|------| | `ArrayAdapter<T>` | 适用于简单数据类型(如 String 数组) | | `SimpleAdapter` | 适用于 `Map<String, Object>` 数据 | | `CursorAdapter` | 适用于从数据库中读取的数据(如 `Cursor`) | | `BaseAdapter` | 自定义适配器,功能最强大 | | `RecyclerView.Adapter` | 适用于 `RecyclerView`(较新的替代方案) | --- ## 三、`ArrayAdapter` 示例 ```java // 定义一个字符串数组 String[] items = {"Item 1", "Item 2", "Item 3"}; // 创建 ArrayAdapter ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, items); // 绑定到 ListView ListView listView = findViewById(R.id.listView); listView.setAdapter(adapter); ``` ### 效果: - 每个列表项是一个简单的文本条目 --- ## 四、自定义 Adapter(继承 `BaseAdapter`) 如果你需要更复杂的布局(比如每项包含图片、文字、按钮等),就需要自定义 `BaseAdapter`。 ### 步骤: 1. **创建数据模型类**(如 `Person`) 2. **创建自定义的 Adapter** 3. **在 `getView()` 方法中设置每个 Item 的布局** #### 示例代码: ```java public class Person { private String name; private int imageResId; public Person(String name, int imageResId) { this.name = name; this.imageResId = imageResId; } public String getName() { return name; } public int getImageResId() { return imageResId; } } ``` ```java public class CustomAdapter extends BaseAdapter { private Context context; private List<Person> persons; public CustomAdapter(Context context, List<Person> persons) { this.context = context; this.persons = persons; } @Override public int getCount() { return persons.size(); } @Override public Object getItem(int position) { return persons.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.item_person, null); TextView tvName = view.findViewById(R.id.tv_name); ImageView ivImage = view.findViewById(R.id.iv_image); Person person = persons.get(position); tvName.setText(person.getName()); ivImage.setImageResource(person.getImageResId()); return view; } } ``` 然后在 Activity 中使用: ```java List<Person> persons = new ArrayList<>(); persons.add(new Person("Alice", R.drawable.ic_person)); persons.add(new Person("Bob", R.drawable.ic_person)); CustomAdapter adapter = new CustomAdapter(this, persons); listView.setAdapter(adapter); ``` --- ## 五、`ListView` 和 `Adapter` 的关系 - `ListView` 不直接操作数据,而是通过 `Adapter` 来获取数据。 - `Adapter` 负责将数据“翻译”成 UI 视图(View)。 - `Adapter` 会根据 `ListView` 的滚动状态来动态地创建或回收视图,提高性能。 --- ## 六、`RecyclerView` 与 `ListView` 的对比(现代推荐) 虽然 `ListView` 仍然可用,但 **`RecyclerView`** 是 Google 推荐的新一代列表控件,具有以下优势: | 特性 | `ListView` | `RecyclerView` | |------|------------|----------------| | 性能 | 一般 | 更好(支持 ViewHolder) | | 灵活性 | 有限 | 非常高(支持多种布局) | | 易用性 | 简单 | 稍复杂 | | 推荐 | 旧项目 | 新项目 | --- ## 七、总结 | 概念 | 说明 | |------|------| | `ListView` | 用于显示可滚动的列表项 | | `Adapter` | 将数据绑定到 `ListView` 的桥梁 | | `ArrayAdapter` | 最简单的适配器,适合简单数据 | | `BaseAdapter` | 自定义适配器,适合复杂布局 | | `RecyclerView` | 替代 `ListView` 的现代列表控件 | --- 如果你是刚开始学习 Android 开发,建议从 `ArrayAdapter` 和 `ListView` 开始,逐步过渡到 `RecyclerView` 和 `Adapter` 的高级用法。需要我帮你写一个完整的示例吗?
上一篇:
滑动到底部或顶部响应的ScrollView实现
下一篇:
在 fragment 里面调用 findViewById
标题录入,一次不能超过6条
返回顶部
留言
留言
评论