Android中实现输入框实时模糊搜索效果的方法

发布时间:2020-08-13 16:27:11

来源:亿速云

阅读:161

作者:小新

Android中实现输入框实时模糊搜索效果的方法?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!

Android输入框实时模糊搜索

很多开发场景会用到搜索框实时模糊搜索来帮助用户输入内容,如图

思路是在EditText 字符变动的时候 弹出ListPopupwindow并更新列表,这样的做法google已经封装为AutoCompleteTextView

用法

mAutoCompleteTextView.setAdapter(adapter);

mAutoCompleteTextView.setFocusable(true);

mAutoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override

public void onItemClick(AdapterView parent, View view, int position, long id) {

}

});

adapter自定义

Adapter 继承 BaseApdater 需要实现 Filterable 接口

private class SearchAdapter extends BaseAdapter implements Filterable {

private Context mContext;

public SearchAdapter(Context context) {

super();

this.mContext = context;

}

@Override

public int getCount() {

if (mSearchCustomEntities == null) {

return 0;

} else {

return mSearchCustomEntities.size();

}

}

@Override

public Object getItem(int position) {

if (mSearchCustomEntities == null) {

return null;

} else {

return mSearchCustomEntities.get(position);

}

}

@Override

public long getItemId(int position) {

return position;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

ViewHolder holder = null;

if (convertView == null) {

holder = new ViewHolder();

convertView = LayoutInflater.from(mContext).inflate(R.layout.item_search_custom, null, false);

holder.tag = (TextView) convertView.findViewById(R.id.tv_custome_type);

holder.name = (TextView) convertView.findViewById(R.id.custom_name);

holder.phone = (TextView) convertView.findViewById(R.id.tv_phone);

convertView.setTag(holder);

} else {

holder = (ViewHolder) convertView.getTag();

}

holder.phone.setText(mSearchCustomEntities.get(position).phone);

holder.name.setText(mSearchCustomEntities.get(position).name);

if (mSearchCustomEntities.get(position).type == CustomerType.TEMPORARY_CUSTOMER.getType()) {

holder.tag.setVisibility(View.VISIBLE);

holder.tag.setText(mContext.getString(R.string.tag_temp));

holder.tag.setTextColor(mContext.getResources().getColor(R.color.customer_temp_txt));

holder.tag.setBackground(mContext.getResources().getDrawable(R.drawable.bg_solid_quote_type_inner_temp));

} else if (mSearchCustomEntities.get(position).type == CustomerType.COLLECTIVE_UNIT.getType()) {

holder.tag.setVisibility(View.VISIBLE);

holder.tag.setText(mContext.getString(R.string.tag_unit));

holder.tag.setTextColor(mContext.getResources().getColor(R.color.customer_unit_txt));

holder.tag.setBackground(mContext.getResources().getDrawable(R.drawable.bg_solid_quote_type_inner_unit));

} else if (mSearchCustomEntities.get(position).type == CustomerType.OUTER_MOTORCADE.getType()) {

holder.tag.setVisibility(View.VISIBLE);

holder.tag.setText(mContext.getString(R.string.tag_car));

holder.tag.setTextColor(mContext.getResources().getColor(R.color.customer_car_txt));

holder.tag.setBackground(mContext.getResources().getDrawable(R.drawable.bg_solid_quote_type_inner_car));

} else {

holder.tag.setVisibility(View.GONE);

}

return convertView;

}

@Override

public Filter getFilter() {

if (mFilter == null) {

mFilter = new ArrayFilter();

}

return mFilter;

}

private class ViewHolder {

TextView tag;

TextView name;

TextView phone;

}

自定义 过滤器

private class ArrayFilter extends Filter {

@Override

protected FilterResults performFiltering(CharSequence prefix) {

FilterResults results = new FilterResults();

String prefixString = prefix.toString();

//筛选部分

XbcClient.getCustomList(prefixString, new EntitiesObserver() {

@Override

protected void onGot(List entities, String msg, int errCode) {

if (entities != null && entities.size() > 0) {

mSearchCustomEntities.clear();

mSearchCustomEntities.addAll(entities);

mSearchAdapter.notifyDataSetChanged();

}else{

if (mSearchCustomEntities!=null & mSearchCustomEntities.size()>0) {

mSearchCustomEntities.clear();

mSearchAdapter.notifyDataSetInvalidated();

}

}

}

});

results.values = mSearchCustomEntities;

results.count = mSearchCustomEntities.size();

return results;

}

感谢各位的阅读!看完上述内容,你们对Android中实现输入框实时模糊搜索效果的方法大概了解了吗?希望文章内容对大家有所帮助。如果想了解更多相关文章内容,欢迎关注亿速云行业资讯频道。

android模糊检索_Android中实现输入框实时模糊搜索效果的方法相关推荐

  1. android模糊检索_【android学习笔记】ormlite学习之模糊搜索like

    [目标]实现表中多个字段模糊搜索. [方法]ormlite like方法 :like(columnName,pattern)    使用%通配符来匹配,指定行数据,返回匹配到的结果 使用示范:mDao ...

  2. 计算机表格增加,电脑中给Excel表格添加水印效果的方法

    相信不少朋友在日常办公中,都会使用Excel软件,它的功能十分强大,能够帮着我们很好地完成数据统计工作.那么,excel打印过程中需要设置水印的话怎么做呢?这里,系统城小编给大家分享一下电脑中设置ex ...

  3. android pcm文件大小_Android中的PCM设备

    Android上的应用一般都是通过AudioTrack类来播放音频,通过AudioRecord类来录制音频.AudioTrack类和AudioRecord类是Android Frameworks封装提 ...

  4. 安卓开发使用ttf文字_Android中正确使用字体图标(iconfont)的方法

    字体图标 字体图标是指将图标做成字体文件(.ttf),从而代替传统的png等图标资源. 使用字体图标的优点和缺点分别为: 优点: 1. 可以高度自定义图标的样式(包括大小和颜色),对于个人开发者尤其适 ...

  5. ios 按钮图片拉伸_iOS中实现图片自适应拉伸效果的方法

    前言 在Android中实现图片的拉伸特别特别简单,甚至不用写一行代码,直接使用.9图片进行划线即可.但是iOS就没这么简单了,比如对于下面的一张图片(原始尺寸:200*103): 我们不做任何处理, ...

  6. android pcm 音量_Android中实时获取音量分贝值详解

    基础知识 度量声音强度,大家最熟悉的单位就是分贝(decibel,缩写为dB).这是一个无纲量的相对单位,计算公式如下: 分子是测量值的声压,分母是参考值的声压(20微帕,人类所能听到的最小声压).因 ...

  7. java实时获取android网速_Android中获取实时网速(2)

    一.实现思路: 1.Android提供有获取当前总流量的方法 2.上一秒 减去 下一面的流量差便是网速 3.注意计算 二.计算网速的工具类: package imcs.cb.com.viewappli ...

  8. android html 换行_Android中Strings资源加空格,换行符,@等方法示例

    Android中Strings资源添加空格,换行符,@等方法,或者替换符等,非常有用,如何在string资源文件里面加入空格,换行,tab等呢?请看如下: test                  ...

  9. android java 实体类 object变量 保存_Android中Intent传递对象的两种方法Serializable,Parcelable...

    Android中的传递有两个方法,一个是Serializable,另一个是Parcelable. Serializable是J2SE本身就支持的.而Parcelable是Android所特有的. 二者 ...

最新文章

  1. bzoj1070————2016——3——14
  2. Nature子刊:微生物系统的功能与功能冗余
  3. 数据结构与算法之美02
  4. 选笔记本选择CPU风扇散热的重要性
  5. FreeSql (九)删除数据
  6. 课堂作业整理三 (集合:list接口)
  7. java调用oracle存储过程_做一点,记一点 ~ Java调用Oracle存储过程
  8. spring注解( @Autowired、@Qualifier、@Resource、@PostConstruct、@PreDestroy、 @Component、@Scope)-描述的比较清楚
  9. 根据文件前四个字节判断文件类型(centos 7)
  10. 2018.7.11 昨天晚上的列表(字典)嵌套题
  11. Jmeter压力测试-微信小程序
  12. 战术导弹飞行控制系统设计
  13. Golang复杂json结构体解析
  14. 第十四章 ESP32 新建一个WIFI热点
  15. 数字图像处理-DFTDCTWHT小波变换分解重构(Matlab)
  16. ps4玩android游戏,PS4更新7.0系统:手机秒变手柄,远程遥控畅玩游戏
  17. python,你也和小猪佩奇一样社会了!
  18. 安装visual studio 2013
  19. 【java】面向对象3.0
  20. 服务器被攻击后处理办法

热门文章

  1. linux smb nfs iscsi,Proxmox VE(PVE)添加nfs/smb/iscsi/NTFS做储存
  2. Codeforces Round #738 (Div. 2) E
  3. python求偏导函数_Python中多元函数的向量化偏导数
  4. 数字图像处理实验之比特平面分层
  5. python控制鼠标点击的包_控制鼠标点击的Python脚本
  6. 视频云转码源码|php云转码系统源码双码率秒切
  7. PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
  8. 微信支付和微信红包设计用例
  9. Kubernetes 笔记(08)— Daemonset 产生缘由、yaml 描述、使用方法、污点和容忍度的定义及使用、静态 Pod
  10. 人工智能Python有哪些应用方向?