当我在EditText上键入EditText时,我希望在下拉菜单中让add、acer、...show。我知道它可以用AutoCompleteTextView.完成但是我要它也显示bat、cat.,字符串a是在一个词中,而不是在前面。
发布于 2012-07-25 03:47:10
看起来,您必须实现自己的过滤器类。然后,您必须实现一个ListAdapter (封装您的字符串列表),它也实现了可过滤接口;当调用getFilter时,这个子类应该返回您的自定义过滤器。通过AutoCompleteTextView ()方法将自定义ListAdapter/Filterable传递给setAdapter。(实现这一切的一个简单方法是对安卓的ArrayAdapter进行子类化。)
这是ArrayAdapter的ArrayAdapter。找到ArrayFilter的定义(在底部),并根据您的需要修改它。下面的代码是可能需要修改的ArrayFilter。在应用到您自己的Adapter子类之前,您必须研究mLock、mObjects和mOriginalValues的效果。
private class ArrayFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence prefix) {
FilterResults results = new FilterResults();
if (mOriginalValues == null) {
synchronized (mLock) {
mOriginalValues = new ArrayList<T>(mObjects);
}
}
if (prefix == null || prefix.length() == 0) {
ArrayList<T> list;
synchronized (mLock) {
list = new ArrayList<T>(mOriginalValues);
}
results.values = list;
results.count = list.size();
} else {
String prefixString = prefix.toString().toLowerCase();
ArrayList<T> values;
synchronized (mLock) {
values = new ArrayList<T>(mOriginalValues);
}
final int count = values.size();
final ArrayList<T> newValues = new ArrayList<T>();
for (int i = 0; i < count; i++) {
final T value = values.get(i);
final String valueText = value.toString().toLowerCase();
if (valueText.contains(prefixString)) {
newValues.add(value);
}
}
results.values = newValues;
results.count = newValues.size();
}
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
//noinspection unchecked
mObjects = (List<T>) results.values;
if (results.count > 0) {
notifyDataSetChanged();
} else {
notifyDataSetInvalidated();
}
}
}https://stackoverflow.com/questions/11642122
复制相似问题