系列文章目录

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动态搜索的简单实现相关推荐

  1. Android动态日志,一个简单的Android日志类

    Android自带的日志类不支持显示文件名和行号,调试时很不方便.而第三方日志库往往又太重.所以自己对Android自带的日志类做了一个简单的封装,主要是调试时使用,不考虑日志丢失和性能问题.日志的输 ...

  2. Android动态加载入门 简单加载模式

    基本信息 作者:kaedea 项目:android-dynamical-loading 初步了解Android动态加载 Java程序中,JVM虚拟机是通过类加载器ClassLoader加载.jar文件 ...

  3. android动态文本框,Android文本框实现搜索和清空效果

    本文实现的效果: 文本框输入为空时显示输入的图标:不为空时显示清空的图标,此时点击清空图标能清空文本框内输入文字. 实现效果: 核心代码: package com.example.test; impo ...

  4. Android开源实战:简单好用、含历史搜索记录的智能搜索框

    前言 Android开发中,类似下图的搜索功能非常常见 今天,我将带来一款 封装了 历史搜索记录功能 & 样式 的Android 自定义搜索框 开源库,希望你们会喜欢. 已在Github开源: ...

  5. Android动态加载技术

    基本信息 Author:kaedea GitHub:android-dynamical-loading 我们很早开始就在Android项目中采用了动态加载技术,主要目的是为了达到让用户不用重新安装AP ...

  6. Android应用开发提高系列(4)——Android动态加载(上)——加载未安装APK中的类...

    前言 近期做换肤功能,由于换肤程度较高,受限于平台本身,实现起来较复杂,暂时搁置了该功能,但也积累了一些经验,将分两篇文章来写这部分的内容,欢迎交流! 关键字:Android动态加载 声明 欢迎转载, ...

  7. [转]Android应用开发提高系列(4)——Android动态加载(上)——加载未安装APK中的类...

    本文转自:http://www.cnblogs.com/over140/archive/2012/03/29/2423116.html 前言 近期做换肤功能,由于换肤程度较高,受限于平台本身,实现起来 ...

  8. 逮虾户!Android程序调试竟简单如斯

    逮虾户!Android程序调试竟简单如斯 PS:行吧,不用百度了,逮虾户是<头文字D>的一首配乐<Deja vu>,中文谐音 "逮虾户",飙车漂移专用BGM ...

  9. GitHub 上排名前 100 的 Android 开源库进行简单的介绍

    本文转载于:https://github.com/Freelander/Android_Data/blob/master/Android-Librarys-Top-100.md 本项目主要对目前 Gi ...

最新文章

  1. java facets_Java UIComponent.getFacets方法代码示例
  2. python退出帮助系统help应该使用exit_简明Python3教程 5.第一步
  3. 福布斯发布2019全球品牌价值100强:华为上榜苹果夺冠
  4. 某些插件 的一点小特性
  5. 18-python基础7-闭包函数和装饰器
  6. 【Paper】2021_Synchronization of Resilient Complex Networks Under Attacks
  7. 从地理围栏看物联网安防
  8. 政企多样化发力 社区半径引领智慧社区生态建设
  9. java读取日志_Java实时监控日志文件并输出的方法详解
  10. scala方法中的变量_Scala变量,变量范围,字段变量,方法参数示例
  11. echarts 圆饼图空心中间加文字
  12. 计算机网络1MB等于多少b,什么是Mb,1Mb等于多少Kb?
  13. vue之解决跨域问题
  14. 工业电脑量产测试之----U盘DOS 启动盘制作(1)
  15. python局域网收集数据_Python实现扫描局域网活动ip
  16. 程序员离职后跳槽到国企,每天主动加班到10点,结果试用期没过?
  17. android项目中在webview中打开pdf
  18. 干货:教你如何玩转信息流广告投放,整套信息流精准定向投放攻略!
  19. solaris 安全设置
  20. 【矩阵论】1.准备知识——复数域上的内积域正交阵

热门文章

  1. 纯java pdf转换成html,JAVA实现PDF转HTML文档的示例代码
  2. Spark Shuffle
  3. FZU - 2261 浪里个浪(多源最短路SPFA)
  4. c语言孙子算法,孙子算法
  5. 参议院和众议院的区别
  6. Linux下pppoe开机自动连接,Linux 系统 PPPoE 宽带连接设置方法
  7. Rook-Ceph mon时钟误差的问题解决
  8. mac:Go安装和配置+GoLand安装和使用之完整教程
  9. SQL注入攻击的常见方式及测试方法
  10. 通达信筹码单峰密集选股公式,突破筹码密集区发出信号