3

次のコードを使用して自分をフィルタリングし、フィルタリングが完了した後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;
        }
    };
}
4

1 に答える 1

4

これを思い通りに見せるには、派手なフットワークが必要になる場合があります。ユーザーが最初にフィルタリング オプションを選択したときに、listView コンテンツを削除できます。

次に、フィルターで FilterListener を使用して、フィルター処理が完了したことを認識し、listView コンテンツを再度表示します。

mAdapter.getFilter().filter(chars, new Filter.FilterListener() {
                public void onFilterComplete(int count) {
                   // show the listView content again;
                }
            });
于 2013-10-09T20:56:21.513 に答える