Android中的AutoCompleteTextView

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

我在这里做类似的事情!!!https://dev59.com/Y-o6XIcBkEYKwwoYPR_f - Etienne Lawlor
1个回答

1

你可能需要编写自己的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;
   }

抱歉,但我无法在AutoCompleteTextView类中找到setFilter()和getFilter()函数。我的Android API级别为8。 - Piyush Agarwal
@pyus13 修改了我的代码。很抱歉,getFilter() 函数在 ArrayAdapter 中。我建议做一个 ArrayAdapter 的例子(可能像这个:http://sudarmuthu.com/blog/using-arrayadapter-and-listview-in-android-applications)。适配器是 Android 的重要组成部分... - Salil Pandit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接