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 上的关闭下拉菜单!
好吧,事实证明答案很简单,有时最好的方法就是检查源代码:)
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)
解决了这个问题。
| 归档时间: |
|
| 查看次数: |
928 次 |
| 最近记录: |