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

标签: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
  • asp之家 软件编程 m.aspxhome.com