android ListView详解
封面图
•
2025-10-21
•
Android开发
262
0
0
0
在 Android 开发中,`ListView` 是一个非常常用的控件,用于展示一组可滚动的列表数据。它非常适合用来显示如联系人列表、消息列表、商品列表等场景。 --- ## 一、`ListView` 简介 `ListView` 是 `android.widget.ListView` 类的一个实例,它是 `AbsListView` 的子类,主要用于**显示一个垂直滚动的列表项**(Items)。 它的核心功能是: - 显示大量数据 - 支持动态加载数据 - 支持点击事件 - 支持自定义布局 - 支持选择和高亮 --- ## 二、`ListView` 的基本使用 ### 1. 布局文件中声明 `ListView` ```xml <!-- activity_main.xml --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> ``` ### 2. 在 Java/Kotlin 中初始化并设置适配器 #### Java 示例: ```java ListView listView = findViewById(R.id.listView); // 创建数据源 String[] data = {"Item 1", "Item 2", "Item 3", "Item 4"}; // 创建 ArrayAdapter ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data); // 设置适配器 listView.setAdapter(adapter); ``` #### Kotlin 示例: ```kotlin val listView: ListView = findViewById(R.id.listView) val data = arrayOf("Item 1", "Item 2", "Item 3", "Item 4") val adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, data) listView.adapter = adapter ``` --- ## 三、`ListView` 的适配器(Adapter) `ListView` 需要通过 **Adapter** 来绑定数据和视图。 ### 常见的 Adapter 类型: | Adapter 类型 | 用途 | |--------------|------| | `ArrayAdapter<T>` | 显示数组或 List 数据 | | `SimpleAdapter` | 显示 Map 数据,常用于复杂布局 | | `CursorAdapter` | 显示数据库查询结果(如 SQLite) | | `BaseAdapter` | 自定义 Adapter,灵活性强 | ### 自定义 Adapter 示例(继承 BaseAdapter) ```java public class MyAdapter extends BaseAdapter { private Context context; private List<String> items; public MyAdapter(Context context, List<String> items) { this.context = context; this.items = items; } @Override public int getCount() { return items.size(); } @Override public Object getItem(int position) { return items.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 rowView = inflater.inflate(R.layout.list_item, parent, false); TextView textView = rowView.findViewById(R.id.textView); textView.setText(items.get(position)); return rowView; } } ``` 然后在 Activity 中使用: ```java List<String> listData = Arrays.asList("Item 1", "Item 2", "Item 3"); MyAdapter adapter = new MyAdapter(this, listData); listView.setAdapter(adapter); ``` --- ## 四、`ListView` 的常用方法 | 方法 | 说明 | |------|------| | `setAdapter(Adapter adapter)` | 设置适配器 | | `setOnItemClickListener(AdapterView.OnItemClickListener listener)` | 设置点击事件监听器 | | `setOnItemSelectedListener(AdapterView.OnItemSelectedListener listener)` | 设置选择事件监听器 | | `getCount()` | 获取数据数量 | | `getItem(int position)` | 获取指定位置的数据对象 | | `getItemId(int position)` | 获取指定位置的 ID | | `getChildAt(int index)` | 获取指定位置的 View(用于高级操作) | --- ## 五、`ListView` 的点击事件 ### Java 示例: ```java listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String selectedItem = (String) parent.getItemAtPosition(position); Toast.makeText(MainActivity.this, "Selected: " + selectedItem, Toast.LENGTH_SHORT).show(); } }); ``` ### Kotlin 示例: ```kotlin listView.setOnItemClickListener { parent, view, position, id -> val selectedItem = parent.getItemAtPosition(position) as String Toast.makeText(this, "Selected: $selectedItem", Toast.LENGTH_SHORT).show() } ``` --- ## 六、`ListView` 的优化技巧 1. **复用 ViewHolder:** - 使用 `ViewHolder` 模式减少 `findViewById` 的调用,提高性能。 2. **避免在 `getView()` 中做耗时操作:** - 如网络请求、图片加载等应放在后台线程中处理。 3. **使用 `RecyclerView` 替代 `ListView`:** - `RecyclerView` 是更现代、灵活、高性能的替代方案,推荐使用。 --- ## 七、`ListView` 和 `RecyclerView` 的对比 | 特性 | `ListView` | `RecyclerView` | |------|------------|----------------| | 性能 | 一般 | 更优 | | 灵活性 | 有限 | 非常高 | | 支持动画 | 有限 | 支持多种动画 | | 复用机制 | 有 | 更高效 | | 推荐使用 | 已逐渐淘汰 | 推荐使用 | --- ## 八、总结 - `ListView` 是 Android 中用于显示列表数据的控件。 - 需要配合 `Adapter` 使用,常见的有 `ArrayAdapter`、`SimpleAdapter` 和自定义 `BaseAdapter`。 - 可以设置点击事件、选择事件等交互。 - 虽然功能强大,但推荐使用 `RecyclerView` 实现更高效的列表展示。 --- 如果你需要我提供 `RecyclerView` 的详细讲解,也可以告诉我!
上一篇:
Android 开发 顶部标题栏ActionBar详解
下一篇:
Android - LinkedIn Integration Tutorial
标题录入,一次不能超过6条
返回顶部
留言
留言
评论