在Android AutoCompleteTextView中,只有在我们正确输入第一个字母时才会显示下拉列表。我的要求是,当我在可用字符串中输入任何字母序列时,它应该显示下拉列表。例如,我的数组中有“January”,所以当我在AutoComplete字段中输入“anu”时,应该在下拉列表中显示“january”。请帮忙解决。
谢谢。
谢谢。
你可能需要编写自己的Filter
并通过TextWatcher
进行附加。这个回答中有一个在AutoCompleteTextView
中使用正则表达式的示例:Android AutoCompleteTextView with Regular Expression?,这里还有另一个正则表达式/Java示例:How can I perform a partial match with java.util.regex.*?
编辑:你需要扩展ArrayAdapter以覆盖getFilter()并返回你的自定义过滤器。
所以你会有类似这样的东西:
autoCompleteTextView.setAdapter(arrayAdapter);
autoCompleteTextView.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int count) {
arrayAdapter.getFilter().filter(s);
}
});
public class RegexFilter extends Filter{
ArrayAdapter<String> mAdapter;
public RegexFilter(ArrayAdapter<String> adapter) {
mAdapter = adapter;
}
...
@Override
protected FilterResults performFiltering(CharSequence constraint) {
Pattern p = Pattern.compile(constraint);
Matcher m = p.matcher("");
List listOfMatches = new ArrayList<String>();
for (String curMonth : months) {
m.reset(curMonth);
if (m.matches || m.hitEnd()) {
listOfMatches.add(curMonth);
}
}
FilterResults results = new FilterResults();
results.values = listOfMatches;
results.count = listOfMatches.size();
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
mAdapter.addAll(results.values);
mAdapter.notifyDataSetChanged();
}
}
public class PartialArrayAdapter extends ArrayAdapter<String> {
...
RegexFilter mFilter;
@Override
public TimedSuggestionFilter getFilter() {
if(null == mFilter)
mFilter = new RegexFilter(this);
return mFilter;
}