2013-10-09 60 views
3

過濾完成後,我使用以下代碼來過濾我的ArrayAdapter,並呼叫setAdapter。出於某種原因,未過濾的數據在應用過濾器之前在屏幕上閃爍。有任何想法嗎?如何防止ListView在過濾之前顯示數據

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

嘗試notifydatasetinvalidated,或者做你的自定義過濾器 – JanBo

+0

我有我的自定義過濾器。我會發布該代碼。 – ashishduh

回答

4

你可能需要做一些花哨的腳法,使這個看你想要的方式。當用戶首先選擇過濾選項時,您可以刪除listView內容。

然後在過濾器上使用FilterListener來知道何時過濾完成並再次顯示listView內容。

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

這工作,我只是等待最初設置ListView的適配器,直到'onFilterComplete'。謝謝! – ashishduh

相關問題