Android输入框实时模糊搜索效果的示例代码
作者:Cola可洛 时间:2022-09-17 02:12:10
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
标签:android,输入框,模糊,搜索
0
投稿
猜你喜欢
C#检查foreach判读是否为null的方法
2021-10-28 01:37:24
Java8 用Lambda表达式给List集合排序的实现
2023-02-05 17:27:09
Java毕业设计实战之仿小米电子产品售卖商城系统的实现
2022-09-29 10:19:47
java中对字符串每个字符统计的方法
2023-09-23 13:53:16
Java数据结构之链表的增删查改详解
2023-08-13 07:48:40
java开发RocketMQ之NameServer路由管理源码分析
2023-10-27 20:56:12
Java中基于Shiro,JWT实现微信小程序登录完整例子及实现过程
2023-07-05 15:01:42
Java基础之List内元素的排序性能对比
2023-04-05 15:13:58
被kafka-client和springkafka版本坑到自闭及解决
2023-08-23 15:07:36
详解Spring-boot中读取config配置文件的两种方式
2021-07-04 15:52:55
java多线程Synchronized实现可见性原理解析
2021-08-26 02:10:02
Maven实战之搭建Maven私服和镜像的方法(图文)
2023-11-27 22:27:06
Spring security如何重写Filter实现json登录
2023-09-15 13:33:31
关于@RequestBody和@RequestParam注解的使用详解
2023-01-20 09:08:20
Spring Bean初始化及销毁多种实现方式
2023-06-10 13:14:01
Spring BeanPostProcessor接口使用详解
2022-12-18 09:19:36
Android组合控件自定义标题栏
2021-11-04 01:12:36
详解Java注解的实现与使用方法
2023-10-31 12:33:20
Android 资源 id详解及的动态获取
2023-06-25 00:32:21
SpringBoot-RestTemplate实现调用第三方API的方式
2022-12-29 09:49:56