带有建议的文本框

时间:2017-12-02 20:31:16

标签: android string android-edittext textview autocompletetextview

我目前正在使用 AutoCompleteTextView ,其中包含一个术语列表,可在用户输入时提供建议。但是,我想使用不同的字符串算法而不是简单地检查字符串是否包含您的搜索词,比较两个字符串的接近程度(例如搜索" chcken"应显示" chicken")

我已经生成了一个方法,它接受一个字符串参数 - 您的搜索查询 - 并返回数据库中根据相关性匹配该查询的有序字符串数组。如何让 AutoCompleteTextView 使用该数组?我无法通过每次按键将其附加到适配器上,因为这并不会改变 AutoCompleteTextView 的固有行为,因为它只显示匹配字符串查询的数组内的元素。

1 个答案:

答案 0 :(得分:1)

您可以在适配器中实现自定义过滤器。

示例:

public class MyFilterableAdapter extends ListAdapter<String> implements Filterable {

    @Override
    public Filter getFilter() {
        return new Filter() {
            @Override
            public String convertResultToString(Object resultValue) {
                return (String) resultValue;
            }

            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                FilterResults filterResults = new FilterResults();
                filterResults.values = filteredArray;
                filterResults.count = filteredArray.size();
                return filterResults;
            }

            @Override
            protected void publishResults(CharSequence constraint, FilterResults results) {
                if (results != null && results.count > 0) {
                    //here you will need to update the array where you are controlling what shows in the list
                    notifyDataSetChanged();
                }
            }
        };
    }
}

由于您没有提供任何代码,我不知道您使用的是哪个适配器,但您需要实现所有适配器方法(getCount,getView等)。

您可以在这些问题中找到更多信息:

How to create custom BaseAdapter for AutoCompleteTextView

Autocompletetextview with custom adapter and filter