gpt4 book ai didi

android - android 中的自动完成 TextView

转载 作者:太空狗 更新时间:2023-10-29 14:28:17 25 4
gpt4 key购买 nike

在 Android AutoCompleteTextView 中,只有当我们正确输入第一个字母时才显示下拉列表。我想要的是,当我在可用字符串中输入任何字母序列时,它应该显示下拉列表。例如“January”在我的数组中,所以当我在自动完成字段中输入“anu”,它应该在下拉列表中显示“一月”。请帮忙。谢谢你

最佳答案

您可能会编写自己的 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;
}

关于android - android 中的自动完成 TextView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9648347/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com