我使用以下代码过滤我的ArrayAdapter
,并在过滤完成后调用setAdapter
。出于某种原因,在应用过滤器之前,未过滤的数据会在屏幕上闪烁。有什么想法吗?
mList = getData();
Collections.sort(mList);
mAdapter = new CustomItem(getActivity(), R.layout.list_item, mList);
String filter = mSpinner1.getSelectedItem().toString();
mAdapter.getFilter().filter(filter);
mListView.setAdapter(mAdapter);
以下是我的自定义过滤器中的代码:
@Override
public Filter getFilter()
{
return new Filter()
{
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results)
{
mSubItems = (ArrayList<CustomItem>)results.values;
if (results.count > 0)
{
notifyDataSetChanged();
}
else
{
notifyDataSetInvalidated();
}
}
@Override
protected FilterResults performFiltering(CharSequence constraint)
{
setFilter(constraint);
List<CustomItem> filteredResults = getFilteredResults();
FilterResults results = new FilterResults();
results.values = filteredResults;
results.count = filteredResults.size();
return results;
}
};
}
答案 0 :(得分:4)
你可能需要做一些花哨的步法,让它看起来像你想要的那样。当用户首先选择过滤选项时,您可以删除listView内容。
然后在过滤器上使用FilterListener来了解过滤何时完成并再次显示listView内容。
mAdapter.getFilter().filter(chars, new Filter.FilterListener() {
public void onFilterComplete(int count) {
// show the listView content again;
}
});