数据更改时 AutoSearchTextView 下拉列表闪烁

ser*_*kye 3 android android-spinner android-filter

我在操作栏中有一个 AutoSearchTextView。当我过滤数据时,下拉菜单会隐藏,然后很快就会显示出来。我真的更喜欢 Play 商店的效果,您可以在其中过滤结果,下拉菜单始终可见,但下拉菜单中的内容会发生变化。

这是我的适配器中的过滤器代码,运行历史查询,获取历史并设置列表项。

@Override
public Filter getFilter() {
    if (filter == null) {
        filter = new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                ResortFilterResult result = new ResortFilterResult();
                String substr = constraint.toString().toLowerCase();
                if (constraint != null) {
                    if (constraint.length() > 0) {
                        result.setHistory(runHistoryQuery(substr));
                    }
                    if (constraint.length() >= 3) {
                        LCResort[] resorts = searchResortWithQuery(substr);
                        result.setQueryResults(Arrays.asList(resorts));
                    }
                }
                FilterResults filterResults = new FilterResults();
                filterResults.values = result;
                return filterResults;
            }

            @Override
            protected void publishResults(CharSequence constraint, FilterResults results) {
                ResortFilterResult result = (ResortFilterResult)results.values;
                history = result.getHistory();
                resorts = result.getQueryResults();
                notifyDataSetChanged();

            }
        };
    }
    return filter;
}
Run Code Online (Sandbox Code Playgroud)

编辑:我更近了一步 - 结果是每次输入新字符时都会调用 TextView 上的关闭下拉菜单!

ser*_*kye 9

好吧,事实证明答案很简单,有时最好的方法就是检查源代码:)

AutoSearchTextView 有一个方法public void onFilterComplete(int count),它依次调用 private void updateDropDownForFilter(int count),如果计数为零,下拉列表将被隐藏。

必须对从 Filterprotected FilterResults performFiltering(CharSequence constraint) 方法返回的 FilterResults 对象设置计数。

filterResults.count = result.getHistory().size() + result.getQueryResults().size();
Run Code Online (Sandbox Code Playgroud)

解决了这个问题。