如何防止ListView在过滤之前显示数据

时间:2013-10-09 20:39:32

标签: android

我使用以下代码过滤我的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;
        }
    };
}

1 个答案:

答案 0 :(得分:4)

你可能需要做一些花哨的步法,让它看起来像你想要的那样。当用户首先选择过滤选项时,您可以删除listView内容。

然后在过滤器上使用FilterListener来了解过滤何时完成并再次显示listView内容。

mAdapter.getFilter().filter(chars, new Filter.FilterListener() {
                public void onFilterComplete(int count) {
                   // show the listView content again;
                }
            });