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输入框实时模糊搜索内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

更多相关文章

  1. 实现Android(安卓)ListView 自动加载更多内容
  2. Android(安卓)启动分析 --- init.c (system/core/init/init.c)
  3. 暂时只会这种导航,实时显示自己的位置,,求其他更好的方法,或api
  4. 包管理系统分析 包管理脚本 /system/bin/pm 解析:
  5. Android(安卓)录音获取麦克风实时音量
  6. Android(安卓)ListView根据内容动态设定高度
  7. Fragment继承类的简单解析
  8. Android电话秀实现(一)
  9. Andriod软键盘出现把原来的布局给顶上去

随机推荐

  1. android handle 消息发送和接受!!!!!
  2. android加载include
  3. 有哪些 Android(安卓)大牛的 blog 值得推
  4. Android(安卓)Log工具类
  5. ADT-20 问题 android support library
  6. Android仿支付宝支付密码输入框
  7. android 获取手机图片分享源码
  8. Android之仿心跳动画实现
  9. Android(安卓)ProgressBar ImageLoading
  10. android按钮点击的四种响应方式