2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > android模糊检索_Android中实现输入框实时模糊搜索效果的方法

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

时间:2021-06-09 15:14:48

相关推荐

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

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

发布时间:-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中实现输入框实时模糊搜索效果的方法大概了解了吗?希望文章内容对大家有所帮助。如果想了解更多相关文章内容,欢迎关注亿速云行业资讯频道。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。