android 输入模糊匹配_android EditText与Filterable接口之模糊查询

博客给出了Android输入模糊匹配的代码实现。定义了UserAdapter类,继承BaseAdapter并实现Filterable接口,重写相关方法。在MyFilter类中,对输入的字符序列进行过滤操作,根据姓名前缀或电话匹配筛选数据,最后更新适配器关联的列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class UserAdapter extends BaseAdapter implements Filterable { private MyFilter myFilter; private List userInfos; private Context context; private ArrayList mOriginalValues; private final Object mLock = newObject();public UserAdapter(Context context, List userInfos) { this.context = context; this.userInfos =userInfos; }

@Overridepublic int getCount() { //TODO Auto-generated method stub return userInfos.size(); }

@Overridepublic Object getItem(int arg0) { //TODO Auto-generated method stub return userInfos.get(arg0); }

@Overridepublic long getItemId(int position) { //TODO Auto-generated method stub return position; }

@Overridepublic View getView(intposition, View convertView, ViewGroup parent) {

View view=convertView;

ViewHolder holder;if (view == null) { view = LayoutInflater.from(context).inflate( R.layout.adapter_mohusearch, null); holder = new ViewHolder(); holder.tv_nick = (TextView) view .findViewById(R.id.adapter_mohutext); view.setTag(holder); } else { holder =(ViewHolder) view.getTag(); }

holder.tv_nick.setText(userInfos.get(position).getUsername());returnview; }static classViewHolder {

TextView tv_nick; TextView tv_mobile; }

@Overridepublic Filter getFilter() { if (myFilter == null) { myFilter = new MyFilter(); } returnmyFilter; }class MyFilter extendsFilter {

@Overrideprotected FilterResults performFiltering(CharSequence prefix) { //持有过滤操作完成之后的数据。该数据包括过滤操作之后的数据的值以及数量。 count:数量 values包含过滤操作之后的数据的值 FilterResults results = new FilterResults();

if (mOriginalValues == null) { synchronized (mLock) { //将list的用户 集合转换给这个原始数据的ArrayList mOriginalValues = new ArrayList(userInfos); } } if (prefix == null || prefix.length() == 0) { synchronized (mLock) { ArrayList list = new ArrayList( mOriginalValues); results.values = list; results.count = list.size(); } } else {//做正式的筛选 String prefixString = prefix.toString().toLowerCase();//声明一个临时的集合对象 将原始数据赋给这个临时变量 final ArrayList values = mOriginalValues;

final int count =values.size();//新的集合对象 final ArrayList newValues = new ArrayList( count);

for (int i = 0; i < count; i++) { //如果姓名的前缀相符或者电话相符就添加到新的集合 final UserInfo value = (UserInfo) values.get(i);

if (Helper.getPinYinHeadChar(value.getUsername()) .startsWith(prefixString) ||value.getUsername().startsWith(prefixString)) {

newValues.add(value); } }//然后将这个新的集合数据赋给FilterResults对象 results.values = newValues; results.count = newValues.size(); }

returnresults; }

@SuppressWarnings("unchecked") @Override protected void publishResults(CharSequence constraint, FilterResults results) { //重新将与适配器相关联的List重赋值一下 userInfos = (List) results.values; AppContext.mListMH=(List) results.values; if (results.count > 0) { notifyDataSetChanged(); } else { notifyDataSetInvalidated(); } }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值