我已经为我的Filterable实现了AutoCompleteTextView
public class IdiomAdapter extends BaseAdapter implements Filterable{
Context context;
List<Idiom> idioms;
public IdiomAdapter(Context context, List<Idiom> idioms){
this.context = context;
this.idioms = idioms;
originaList = new ArrayList<Idiom>(idioms);
filter = new IdiomFilter();
}
@Override
public int getCount() {
if (idioms != null) {
return idioms.size();
}else{
return 0;
}
}
@Override
public Object getItem(int arg0) {
return idioms.get(arg0);
}
@Override
public long getItemId(int arg0) {
return idioms.get(arg0).getId();
}
@Override
public Filter getFilter() {
return filter;
}
private IdiomFilter filter;
ArrayList<Idiom> originaList;
public class IdiomFilter extends Filter {
public IdiomFilter(){
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults oReturn = new FilterResults();
ArrayList<Idiom> result = new ArrayList<Idiom>();
if (originaList == null) {
originaList = (ArrayList<Idiom>) idioms;
}
if (constraint !=null) {
if (originaList !=null && originaList.size() > 0) {
for (Idiom idiom : originaList) {
if (idiom.getVerb().contains(constraint))
result.add(idiom);
}
}
oReturn.values = result;
}
return oReturn;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
idioms = (ArrayList<Idiom>)results.values;
notifyDataSetChanged();
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
View v = convertView;
// first check to see if the view is null. if so, we have to inflate it.
// to inflate it basically means to render, or show, the view.
if (v == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.simple_list_item_1, null);
}
return v;
}在我的活动中使用它:
IdiomAdapter adapter = new IdiomAdapter(MainActivity.this, idioms);
AutoCompleteTextView txtSearch = (AutoCompleteTextView) findViewById(R.id.txtSearch);
txtSearch.setAdapter(adapter);当我在AutoCompleteTextView中键入关键字时,似乎是在工作,但结果却什么也没有显示:

有什么想法吗?
发布于 2014-09-22 05:35:23
只需尝试setThreshold(1) of AutoCompleteTextView。增加这一行:
txtSearch.setThreshold(1); 使用此代码的适配器:
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Filter;
import android.widget.TextView;
public class DataSearchAdapter extends ArrayAdapter<DataSearchModel> {
private ArrayList<DataSearchModel> items;
private ArrayList<DataSearchModel> itemsAll;
private ArrayList<DataSearchModel> suggestions;
private int viewResourceId;
@SuppressWarnings("unchecked")
public DataSearchAdapter(Context context, int viewResourceId,
ArrayList<DataSearchModel> items) {
super(context, viewResourceId, items);
this.items = items;
this.itemsAll = (ArrayList<DataSearchModel>) items.clone();
this.suggestions = new ArrayList<DataSearchModel>();
this.viewResourceId = viewResourceId;
}
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) getContext().getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(viewResourceId, null);
}
DataSearchModel _data = items.get(position);
if (_data != null) {
TextView dataLabel = (TextView) v.findViewById(android.R.id.text1);
if (dataLabel != null) {
dataLabel.setText(_data.getDataName());
}
}
return v;
}
@Override
public Filter getFilter() {
return nameFilter;
}
Filter nameFilter = new Filter() {
public String convertResultToString(Object resultValue) {
String str = ((DataSearchModel) (resultValue)).getDataName();
return str;
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
if (constraint != null) {
suggestions.clear();
for (DataSearchModel _data : itemsAll) {
if (_data.getDataName().toLowerCase()
.startsWith(constraint.toString().toLowerCase())) {
suggestions.add(_data);
}
}
FilterResults filterResults = new FilterResults();
filterResults.values = suggestions;
filterResults.count = suggestions.size();
return filterResults;
} else {
return new FilterResults();
}
}
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
@SuppressWarnings("unchecked")
ArrayList<DataSearchModel> filteredList = (ArrayList<DataSearchModel>) results.values;
if (results != null && results.count > 0) {
clear();
for (DataSearchModel c : filteredList) {
add(c);
}
notifyDataSetChanged();
}
}
};
}https://stackoverflow.com/questions/25967051
复制相似问题