Android EditText搜索框动态过滤ListView数据实现
140 浏览量
更新于2024-08-28
1
收藏 147KB PDF 举报
"这篇教程介绍了如何在Android应用中实现根据EditText搜索框动态更新ListView显示数据的功能。"
在Android开发中,有时我们需要实现这样一个功能:用户在EditText搜索框中输入关键词时,ListView会实时根据输入内容过滤并显示匹配的数据。这个功能在很多应用中都非常常见,比如联系人搜索、应用市场搜索等。下面我们将详细讲解如何实现这个功能。
1. 创建布局文件
首先,我们需要创建一个XML布局文件,包含一个EditText和一个ListView。EditText将作为搜索框,ListView用于展示数据。可以设置EditText的属性,例如添加清除按钮,以便用户能够快速清空输入。布局文件中的代码可能如下:
```xml
<RelativeLayout>
<EditText
android:id="@+id/search_box"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入关键词"
android:inputType="textVisiblePassword" />
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/search_box" />
</RelativeLayout>
```
2. 初始化数据集
接下来,我们需要创建一个数据集,通常使用ArrayList存储数据。数据集可以是自定义的对象列表,或者使用HashMap存储键值对。这里我们使用ArrayList<Map<String, Object>>,其中键可以是标题(title)和内容(text)。同时,我们还需要创建两个ArrayList分别存储标题和内容,以便后续处理。初始化代码如下:
```java
ArrayList<Map<String, Object>> mData = new ArrayList<>();
ArrayList<String> mListTitle = new ArrayList<>();
ArrayList<String> mListText = new ArrayList<>();
// 填充数据,例如:
mListTitle.add("这是个标题!");
mListText.add("这是个内容。2014.09.");
for (int i = 0; i < mListTitle.size(); i++) {
Map<String, Object> item = new HashMap<>();
item.put("title", mListTitle.get(i));
item.put("text", mListText.get(i));
mData.add(item);
}
```
3. 设置ListView的Adapter
创建一个SimpleAdapter或者自定义的Adapter,将数据集mData传入。SimpleAdapter的构造函数通常需要上下文、列表项布局、数据集、键列表和值列表。在这里,键列表可以是["title", "text"],值列表对应数据集中的键。
```java
SimpleAdapter adapter = new SimpleAdapter(
MainActivity.this, mData, R.layout.list_item,
new String[]{"title", "text"}, new int[]{R.id.title, R.id.text});
ListView mListView = findViewById(R.id.list_view);
mListView.setAdapter(adapter);
```
4. 监听EditText的文本变化
为了实现实时搜索功能,我们需要监听EditText的文本变化。可以使用TextWatcher接口,当用户输入时调用其方法。在afterTextChanged()方法中,我们可以对数据集进行过滤,并使用ListView的Adapter的`notifyDataSetChanged()`方法通知数据已更新:
```java
EditText searchBox = findViewById(R.id.search_box);
searchBox.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
@Override
public void afterTextChanged(Editable s) {
String searchText = s.toString().trim();
if (searchText.isEmpty()) {
// 如果搜索框为空,显示所有数据
mData.clear();
mData.addAll(mOriginalData); // mOriginalData是原始未过滤的数据集
} else {
// 过滤数据
mData.clear();
for (Map<String, Object> item : mOriginalData) {
String title = (String) item.get("title");
String text = (String) item.get("text");
if (title.contains(searchText) || text.contains(searchText)) {
mData.add(item);
}
}
}
adapter.notifyDataSetChanged(); // 更新ListView
}
});
```
至此,我们就完成了根据EditText搜索框动态更新ListView显示数据的功能。当用户在搜索框中输入内容时,ListView会实时过滤并显示匹配的数据。这个功能提高了用户体验,使用户能够更快地找到所需信息。在实际开发中,还可以根据需求优化搜索算法,提高搜索效率。
528 浏览量
421 浏览量
354 浏览量
213 浏览量
1170 浏览量
202 浏览量
267 浏览量
点击了解资源详情
901 浏览量

weixin_38612139
- 粉丝: 3
最新资源
- 实现文字与图片无缝滚动效果的js技巧
- 使用Microsoft USMT和PowerShell GUI工具迁移Windows用户配置文件
- 《语义万维网:工程实践指南》第2版深入解析
- Packer插件实现Windows更新安装自动化
- 完全使用HTML和CSS复刻的下一个网站范例
- 蓝色WAP手机旅游网站模板源码解析与应用
- 体验在线JSON编辑器:JSONeditor的便捷之道
- 掌握Linux输出重定向:学习与之间的区别
- Android实现不规则瀑布流布局效果
- Jupyter笔记本仓库:算法、机器学习与日常日记管理
- Qt在CentOS 7环境下实现文件对话框实例教程
- 2005年哈工大通信工程电子考研复试题解析
- Twitch聊天叠加工具开发指南
- Microsoft Press出品HTML5学习教程英文版
- WAPEQ 1.4:WAP建站系统源代码及多技术项目资源
- js文字滚动插件:实现公告列表文字自动上下滚动效果