Android动态搜索的简单实现
系列文章目录
Android动态搜索的简单实现
文章最后有源码
文章目录
- 系列文章目录
- 前言
- 一、addTextChangedListener
- 二、本文案例
- 1.介绍一下SearchView的一些方法
- 2.准备数据
- 3.初始化以及填充数据
- 4.在SearchView中用户输入字符时激发方法里写入简单逻辑
- 三、源码
前言
提到Android的动态搜索,大多应该会想到EditText的文本改变的监听器(addTextChangedListener),本文会简单介绍一下,但是本文介绍的是SearchView+Listview的实现。
效果图:
一、addTextChangedListener
使用这种方式的思路简述就是,当监听到文本改变时,就用Handler post一个Runnable去做相应的改变,动态修改ListView的显示。
二、本文案例
1.介绍一下SearchView的一些方法
setIconified():设置搜索框直接展开显示。左侧有放大镜(在搜索框中) 右侧有叉叉 可以关闭搜索框
setIconifiedByDefault():设置搜索框直接展开显示。左侧有放大镜(在搜索框外) 右侧无X样式点击按钮 有输入内容后有X样式点击按钮 不能关闭搜索框
onActionViewExpanded():设置搜索框直接展开显示。左侧有无放大镜(在搜索框中) 右侧无叉叉 有输入内容后有X样式点击按钮, 不能关闭搜索框
setOnQueryTextListener():为 SearchView 中的用户操作设置侦听器。
setSubmitButtonEnabled():当查询非空时启用显示提交按钮。
setQueryHint():查询提示语句
2.准备数据
本案例使用一个String数组
private final String[] mStrings = Cheeses.sCheeseStrings;
3.初始化以及填充数据
mSearchView = (SearchView) findViewById(R.id.search_view);mListView = (ListView) findViewById(R.id.list_view);mListView.setAdapter(mAdapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,mStrings));//设置是否可以通过键盘输入的字符来过滤掉不需要的选项,定位到需要的选项。mListView.setTextFilterEnabled(true);setupSearchView();
private void setupSearchView() {//设置搜索框直接展开显示。左侧有放大镜(在搜索框中) 右侧有叉叉 可以关闭搜索框//mSearchView.setIconified(false);//设置搜索框直接展开显示。左侧有放大镜(在搜索框外) 右侧无叉叉 有输入内容后有叉叉 不能关闭搜索框//mSearchView.setIconifiedByDefault(false);//设置搜索框直接展开显示。左侧有无放大镜(在搜索框中) 右侧无叉叉 有输入内容后有叉叉 不能关闭搜索框mSearchView.onActionViewExpanded();//为 SearchView 中的用户操作设置侦听器。mSearchView.setOnQueryTextListener(this);//当查询非空时启用显示提交按钮。mSearchView.setSubmitButtonEnabled(false);//查询提示语句mSearchView.setQueryHint(getString(R.string.cheese_hunt_hint));}
4.在SearchView中用户输入字符时激发方法里写入简单逻辑
//用户输入字符时激发该方法public boolean onQueryTextChange(String newText) {if (TextUtils.isEmpty(newText)) {mListView.clearTextFilter();} else {mListView.setFilterText(newText.toString());}return true;}
三、源码
JimengSearchView.java
public class JimengSearchView extends Activity implements SearchView.OnQueryTextListener {private SearchView mSearchView;private ListView mListView;private ArrayAdapter<String> mAdapter;private final String[] mStrings = Cheeses.sCheeseStrings;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);getWindow().requestFeature(Window.FEATURE_ACTION_BAR);setContentView(R.layout.searchview_filter);mSearchView = (SearchView) findViewById(R.id.search_view);mListView = (ListView) findViewById(R.id.list_view);mListView.setAdapter(mAdapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,mStrings));//设置是否可以通过键盘输入的字符来过滤掉不需要的选项,定位到需要的选项。mListView.setTextFilterEnabled(true);setupSearchView();mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {String str = (String)((TextView) view).getText();Toast.makeText(JimengSearchView.this,str,Toast.LENGTH_SHORT).show();}});}private void setupSearchView() {//设置搜索框直接展开显示。左侧有放大镜(在搜索框中) 右侧有叉叉 可以关闭搜索框//mSearchView.setIconified(false);//设置搜索框直接展开显示。左侧有放大镜(在搜索框外) 右侧无叉叉 有输入内容后有叉叉 不能关闭搜索框//mSearchView.setIconifiedByDefault(false);//设置搜索框直接展开显示。左侧有无放大镜(在搜索框中) 右侧无叉叉 有输入内容后有叉叉 不能关闭搜索框mSearchView.onActionViewExpanded();//为 SearchView 中的用户操作设置侦听器。mSearchView.setOnQueryTextListener(this);//当查询非空时启用显示提交按钮。mSearchView.setSubmitButtonEnabled(false);//查询提示语句mSearchView.setQueryHint(getString(R.string.cheese_hunt_hint));}//用户输入字符时激发该方法public boolean onQueryTextChange(String newText) {if (TextUtils.isEmpty(newText)) {mListView.clearTextFilter();} else {mListView.setFilterText(newText.toString());}return true;}public boolean onQueryTextSubmit(String query) {return false;}
}
布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><SearchViewandroid:id="@+id/search_view"android:layout_width="match_parent"android:layout_height="wrap_content"/><ListViewandroid:id="@+id/list_view"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_weight="1"/></LinearLayout>
strings.xml
<string name="cheese_hunt_hint">请输入要查询的内容</string>
Cheeses.java
public class Cheeses {public static final String[] sCheeseStrings = {"Android自定义view之3D正方体","计蒙不吃鱼","Android自定义view之利用drawArc方法实现动态效果","Android 3D效果的实现","OkHttp源码解析","Android翻转动画(卡片翻转效果)","Android自定义view之围棋动画","Android自定义view之模仿登录界面文本输入框(华为云APP)","Android自定义view之太极图","Android自定义view获取attr中自定义颜色的问题","Android对抗反编译","Android常用的room增删改查语句(外部数据库)","Android用Canvas画一个折线图,并加以简单封装","Android用Canvas画一个真正能跑的跑马灯","Android网络小说阅读器的实现","Android护眼模式(argb)","Android约束布局ConstraintLayout","Android实现EditText的抖动效果"};}
Android动态搜索的简单实现相关推荐
- Android动态日志,一个简单的Android日志类
Android自带的日志类不支持显示文件名和行号,调试时很不方便.而第三方日志库往往又太重.所以自己对Android自带的日志类做了一个简单的封装,主要是调试时使用,不考虑日志丢失和性能问题.日志的输 ...
- Android动态加载入门 简单加载模式
基本信息 作者:kaedea 项目:android-dynamical-loading 初步了解Android动态加载 Java程序中,JVM虚拟机是通过类加载器ClassLoader加载.jar文件 ...
- android动态文本框,Android文本框实现搜索和清空效果
本文实现的效果: 文本框输入为空时显示输入的图标:不为空时显示清空的图标,此时点击清空图标能清空文本框内输入文字. 实现效果: 核心代码: package com.example.test; impo ...
- Android开源实战:简单好用、含历史搜索记录的智能搜索框
前言 Android开发中,类似下图的搜索功能非常常见 今天,我将带来一款 封装了 历史搜索记录功能 & 样式 的Android 自定义搜索框 开源库,希望你们会喜欢. 已在Github开源: ...
- Android动态加载技术
基本信息 Author:kaedea GitHub:android-dynamical-loading 我们很早开始就在Android项目中采用了动态加载技术,主要目的是为了达到让用户不用重新安装AP ...
- Android应用开发提高系列(4)——Android动态加载(上)——加载未安装APK中的类...
前言 近期做换肤功能,由于换肤程度较高,受限于平台本身,实现起来较复杂,暂时搁置了该功能,但也积累了一些经验,将分两篇文章来写这部分的内容,欢迎交流! 关键字:Android动态加载 声明 欢迎转载, ...
- [转]Android应用开发提高系列(4)——Android动态加载(上)——加载未安装APK中的类...
本文转自:http://www.cnblogs.com/over140/archive/2012/03/29/2423116.html 前言 近期做换肤功能,由于换肤程度较高,受限于平台本身,实现起来 ...
- 逮虾户!Android程序调试竟简单如斯
逮虾户!Android程序调试竟简单如斯 PS:行吧,不用百度了,逮虾户是<头文字D>的一首配乐<Deja vu>,中文谐音 "逮虾户",飙车漂移专用BGM ...
- GitHub 上排名前 100 的 Android 开源库进行简单的介绍
本文转载于:https://github.com/Freelander/Android_Data/blob/master/Android-Librarys-Top-100.md 本项目主要对目前 Gi ...
最新文章
- java facets_Java UIComponent.getFacets方法代码示例
- python退出帮助系统help应该使用exit_简明Python3教程 5.第一步
- 福布斯发布2019全球品牌价值100强:华为上榜苹果夺冠
- 某些插件 的一点小特性
- 18-python基础7-闭包函数和装饰器
- 【Paper】2021_Synchronization of Resilient Complex Networks Under Attacks
- 从地理围栏看物联网安防
- 政企多样化发力 社区半径引领智慧社区生态建设
- java读取日志_Java实时监控日志文件并输出的方法详解
- scala方法中的变量_Scala变量,变量范围,字段变量,方法参数示例
- echarts 圆饼图空心中间加文字
- 计算机网络1MB等于多少b,什么是Mb,1Mb等于多少Kb?
- vue之解决跨域问题
- 工业电脑量产测试之----U盘DOS 启动盘制作(1)
- python局域网收集数据_Python实现扫描局域网活动ip
- 程序员离职后跳槽到国企,每天主动加班到10点,结果试用期没过?
- android项目中在webview中打开pdf
- 干货:教你如何玩转信息流广告投放,整套信息流精准定向投放攻略!
- solaris 安全设置
- 【矩阵论】1.准备知识——复数域上的内积域正交阵