2011-07-22 51 views
2

我想控制ListView數據的顯示。我想在顯示列表之前進行過濾和排序。在我調用publishResults()以及執行我的過濾並調用publishResults()之前,正在刷新列表。ArrayAdapter.setNotifyOnChange無法正常工作

public StoreAdapter(Context context, int textViewResourceId, ArrayList<Store> items, StoresTab storeTab) { 
    super(context, textViewResourceId, items); 
    this.items = items; 
    this.storeTab = storeTab; 
    this.context = context; 
    this.filter = new StoreFilter(); 
    imageLoader = ImageThreadLoader.getOnDiskInstance(context); 
    setNotifyOnChange(false); 
} 

protected void publishResults(CharSequence constraint, FilterResults results) { 
     // NOTE: this function is *always* called from the UI thread. 
     ArrayList<Store> filtered = (ArrayList<Store>)results.values; 
     clear(); 
     if (filtered != null) 
     { 
      for (int i = 0; i < filtered.size(); i++) 
      { 
       add(filtered.get(i)); 
      } 
      sort(storeTab); 
     } 
     notifyDataSetChanged(); 
    } 

在我調用過濾器操作之前顯示視圖。我在我的ListActivity中調用adater.add()方法,並且不要在其他地方調用notifyDataSetChanged()方法。

我在這裏旋轉我的輪子。我沒有來源來調試它。

當我調試時,我可以看到notifydatasetchanged屬性= false當arrayAdapter.getView被調用。有沒有辦法找出哪些事件正在調用這個被調用?

回答

0

你試過adapter.notifyDataSetChanged()而不是notifyDataSetChanged()嗎?

+0

它得到通知。問題是在我調用notifyDataSetChanged()之前它會得到通知。我的視圖生成了兩次,一次在調用notifyDataSetChanged之前,一次之後。 – kgibbon

+0

那麼你說它是在生成第二個視圖之前通知列表?也許增加一些布爾值來確保它不會發生。我也喜歡在數據庫中添加一些日誌以查找過程的順序,然後從那裏進行調試。 – Pengume

+0

在我調用notifyDataSetChanged之前,它會通知要繪製的列表。我有一些布爾人,現在它不是繪畫,但它仍然不行爲規範。我不會在這方面花費太多時間,因爲我有一個解決方法。謝謝Jared。 – kgibbon