是否可以使用AutoCompleteTextView查找字符串,但建议另一个字符串?
例如,如果用户键入'Yau'或'yauh',则会显示'Yáuh',因此用户无需键入特殊字符。
答案 0 :(得分:1)
我已经开始扩展ArrayAdapter了,但它似乎没有被覆盖:
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.widget.ArrayAdapter;
import android.widget.Filter;
import android.widget.Filterable;
public class foreignAdapter<T> extends ArrayAdapter implements Filterable {
String temp;
String word;
private List<T> mObjects;
private final Object mLock = new Object();
private ArrayList<T> mOriginalValues;
public foreignAdapter(Context context, int resource, T[] object) {
super(context, resource, object);
}
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) {
synchronized (mLock) {
ArrayList<T> list = new ArrayList<T>(mOriginalValues);
results.values = list;
results.count = list.size();
}
}
else {
String prefixString = prefix.toString().toLowerCase();
final ArrayList<T> values = mOriginalValues;
final int count = values.size();
final ArrayList<T> newValues = new ArrayList<T>(count);
for (int i = 0; i < count; i++) {
final T value = values.get(i);
final String valueText = value.toString().toLowerCase();
/* Run for each character in the string */
for(int j=0;j<valueText.length();j++)
{
switch(valueText.charAt(j))
{
case 'á':
case 'ā':
case 'à':
temp+='a';
break;
case 'í':
case 'ī':
case 'ì':
temp+='i';
break;
case 'è':
case 'ē':
case 'é':
temp+='e';
break;
case 'ó':
case 'ō':
case 'ò':
temp+='o';
break;
case 'ú':
case 'ū':
case 'ù':
temp+='u';
break;
case 'ģ':
temp+='g';
break;
default:
temp+=word.charAt(j);
break;
}
}
// First match against the whole, non-splitted value
if (temp.startsWith(prefixString)) {
newValues.add(value);
} else {
final String[] words = temp.split(" ");
final int wordCount = words.length;
for (int k = 0; k < wordCount; k++) {
if (words[k].startsWith(prefixString)) {
newValues.add(value);
break;
}
}
}
}
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 :(得分:0)
我没有尝试过,但这肯定会......
您尚未指定数据是在数组还是数据库中,所以我将假设一个数组(或列表)。
覆盖适配器的getFilter()
。 (检查this question以了解具体方法)
现在,在该示例中(在链接中),作者使用startsWith
来过滤结果。相反,你将不得不使用自己的比较方法来考虑这些特殊字符。 (如,将á
等同于a
)
答案 2 :(得分:-1)
有AutoCompleteTextView,所以我想这就是你需要的:
<AutoCompleteTextView
android:id="@+id/autoCompleteTextView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="MyAutoCompleteTextView" >
</AutoCompleteTextView>
以下是官方信息:AutoCompleteTextView
我刚刚看到有一个教程,Tutorial of AutoCompleteTextView