您的位置:首页 > 其它

搜索历史 AutoCompleteTextView自定义匹配关键字匹配

2016-03-19 19:47 549 查看
参考文章 http://blog.csdn.net/lxgwm2008/article/details/8730384 ;



最近刚开始写博客质量不高 并且都是一些基础的东西 但是我还是搞了好几个小时 也比较菜鸟还比较笨 我还是要记录下来这心酸的过程 ! 

 

东西比较基础各位不要见怪 请多多批评!

思路 



所以我们按照网上说的写 如下

上代码直接把适配器换成这个就ok了

package cn.net.baseadapterhelper;

import java.util.ArrayList;
import java.util.List;
import cn.net.handset_yuncar.R;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.TextView;
/*
* 搜索历史自定义适配器 实现包含匹配
*
*/
public class FilterAdapter<T> extends BaseAdapter implements Filterable {

private List<T> fData;//过路器(MyFilter)数据源
LayoutInflater con;
private List<T> data;//作为参数的数据源
private final Object mLock = new Object();
private MyFilter mFilter = null;

public FilterAdapter(Context con, List<T> data) {
this.con = LayoutInflater.from(con);
mFilter = new MyFilter();
this.data = new ArrayList<T>(data);
}

public int getCount() {
return data.size();
}

public Object getItem(int position) {
return data.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

public View getView(int peisition, View conview, ViewGroup arg2) {
View view = null;
ViewHoder vh = null;
if (conview == null) {
vh = new ViewHoder();

view = con.inflate(R.layout.ruku_sousou, null);
vh.te = (TextView) view.findViewById(R.id.filter_textview);
view.setTag(vh);

} else {

view = conview;
vh = (ViewHoder) view.getTag();
}
vh.te.setText((CharSequence) data.get(peisition));

return view;
}

class ViewHoder {
TextView te;
}

@Override
public android.widget.Filter getFilter() {

return mFilter;
}

private class MyFilter extends Filter {

/**
* 过滤autoCompleteEditext中的字 改成包含
*/
protected FilterResults performFiltering(CharSequence constraint) {

FilterResults results = new FilterResults();
if (fData == null) {
synchronized (mLock) {
fData = new ArrayList<T>(data);
}
}
int count = fData.size();
ArrayList<T> values = new ArrayList<T>();

for (int i = 0; i < count; i++) {
T value = fData.get(i);
String valueText = value.toString();
if (null != valueText && null != constraint
&& valueText.contains(constraint)) {
// Log.d("--==tag", "--==tag--" + value);
values.add(value);
}
}
results.values = values;
results.count = values.size();
return results;
}

/**
* 在FilterResults方法中把过滤好的数据传入此方法中 results过滤好的数据源重新给data赋值显示新的适配内容
* 并刷新适配器
*/
@Override
protected void publishResults(CharSequence arg0, FilterResults results) {

data = (List<T>) results.values;
if (results.count > 0) {
notifyDataSetChanged();
} else {
notifyDataSetInvalidated();
}

}

}

}


 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息