当我在EditText上键入a
时,我想让add
,acer
,...显示在下拉菜单中。我知道它可以完成AutoCompleteTextView。但我想它也显示bat
,cat
...,字符串a
是在一个字,不在前面。Android AutoCompleteTextView
0
A
回答
0
看起来你必须实现你自己的Filter类。然后你必须实现一个ListAdapter(包装你的字符串列表),它也实现了Filterable接口;这个子类在getFilter被调用时应该返回你的自定义Filter。您可以通过setAdapter()方法将自定义的ListAdapter/Filterable传递给AutoCompleteTextView。 (一个简单的方法来做到这一切是继承Android的ArrayAdapter。)
这里的source code为一个ArrayAdapter。找到ArrayFilter的定义(在底部)并根据需要进行修改。以下代码是您可能正在寻找的修改的ArrayFilter。在应用到您自己的适配器子类之前,您必须研究mLock
,mObjects
和的影响。
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();
}
}
}
1
Here是你在找什么..
你尝试一些东西是一回事吗?如果是,请在这里发布你的代码... – 2012-07-25 03:10:28