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被調用。有沒有辦法找出哪些事件正在調用這個被調用?
它得到通知。問題是在我調用notifyDataSetChanged()之前它會得到通知。我的視圖生成了兩次,一次在調用notifyDataSetChanged之前,一次之後。 – kgibbon
那麼你說它是在生成第二個視圖之前通知列表?也許增加一些布爾值來確保它不會發生。我也喜歡在數據庫中添加一些日誌以查找過程的順序,然後從那裏進行調試。 – Pengume
在我調用notifyDataSetChanged之前,它會通知要繪製的列表。我有一些布爾人,現在它不是繪畫,但它仍然不行爲規範。我不會在這方面花費太多時間,因爲我有一個解決方法。謝謝Jared。 – kgibbon