Android输入框实时模糊搜索效果的示例代码
作者:Cola可洛 发布时间:2022-09-17 02:12:10
标签: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<SearchCustomEntity>() {
@Override
protected void onGot(List<SearchCustomEntity> 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;
}
来源:https://blog.csdn.net/qq_35892584/article/details/107781526


猜你喜欢
- private void button2_Click(object sender, EventArgs e) &nbs
- C#操作Excel的方法有很多种,常见的有微软官方的OLE Automation,Apache的POI等。这里介绍的是POI翻译成C#的NP
- Springboot导出文件,前端下载文件后端代码可以把请求设置为post,我这里是Get @RequestMapping(value =
- Java绘图中,显示文字的方法主要有三种:(1)drawString(String str,int x,int y):在指定的位置显示字符串
- 杨辉三角的规律:1.每行的数据个数和在第几行一样。2.每行第一个数和最后一个数都是1.3.每行除了第一个数据和最后一个数据 其他数据的值等于
- 本文实例为大家分享了OpenCV+Qt实现图像处理操作的具体代码,供大家参考,具体内容如下一、目标Qt界面实现 雪花屏 高斯模糊 中值滤波
- 本文实例讲述了Android编程实现AIDL(跨进程通信)的方法。分享给大家供大家参考,具体如下:一. 概述:跨进程通信(AIDL),主要实
- spring:1)开源框架2)IoC(控制反转),将类的创建和依赖关系写在配置文件里,由配置文件注入,实现了松耦合3)AOP 将安全,事务等
- Jackson库中objectMapper用法ObjectMapper类是Jackson库的主要类。它提供一些功能将转换成Java对象与SO
- 应用场景:在Android开发过程中,有时需要调用手机自身设备的功能,本文侧重摄像头拍照功能的调用。知识点介绍:使用权限:调用手机自身设备功
- 条件(也称为条件队列 或条件变量)为线程提供了一个含义,以便在某个状态条件现在可能为 true 的另一个线程通知它之前,一直挂起该线程(即让
- 本文实例为大家分享了C#语言实现ini文件读写操作的具体代码,供大家参考,具体内容如下1、ini文件是什么?见百度百科2、C#语言实现ini
- Android Parcelable 源码解析大家都知道,要想在Intent里面传递一些非基本类型的数据,有两种方式,一种实现Parcela
- 预览图一、xml布局<?xml version="1.0" encoding="utf-8"?
- 前言最近因为同事bean配置的问题导致生产环境往错误的redis实例写入大量的数据,差点搞挂redis。经过快速的问题定位,发现是同事新增一
- 简介: 很多软件为了安全防止恶意攻击,会在登录/注册时进行人机验证,常见的人机验证方式有:谷歌点击复选框进行验证,输入验证码验证,短信验证码
- 本文实例讲述了C#读写文本文件的方法。分享给大家供大家参考。具体分析如下:System.IO命名空间中的类为托管应用程序提供文件以及其他形式
- 本文实例讲述了C#实现两个时间相减的方法。分享给大家供大家参考。具体实现方法如下:using System; using Sys
- Android 实现全屏显示的几种方法整理A、设置主题实现全屏直接在AndroidManifest.xml文件中设定Activity主题为全
- 废话不多说了,直接给大家贴代码了。具体代码如下所述:<?xml version="1.0" encoding=&q