我正在構建一個應用程序,它是根據與服務器通信的Futuretask線程動態填充/清除數組列表。ArrayAdapter刷新數據
問題是,當我添加新的對象到我arrayadapter以任何方式我稱之爲notifyDataSetChanged或setNotifyOnChange
(例如添加項目之後,我也嘗試做一些postadd函數調用notifyDataSetChanged ,或者甚至試圖在適配器構造函數添加setNotifyOnChange,或添加之前(adapter.setNotifyOnChange(真))在此Futuretask它只是凍結線程,並導致應用程序故障)
。沒有notifyonchange當我滑動我的手指來調用ArrayAdapter的getView()它的作品,但這是一個不受歡迎的行爲。
注意:我正在通過靜態變量引用訪問適配器。
注意#2:我不認爲一遍又一遍地創建新的適配器是一個明智的選擇。
/編輯:
我的刪除方法是這樣的:
public void remove (int itemid) {
for (ContactItem i : items)
if (i.ID == itemid)
items.remove(i);
}
(和它掛到底在最後pharantesis)
你好,你的回答幫助我謝謝你,但我也遇到了非常奇怪的錯誤。我還添加了setNotifyOnChange(false);到適配器的構造函數,所以它不會被隱式調用,當我試圖添加/從列表中刪除,但仍然有時這種調用發生在我刪除和整個應用程序掛起時,當我點擊屏幕這就是我得到的。 – Smarty77 2014-11-04 21:39:30
java.lang.IllegalStateException:適配器的內容已更改,但ListView未收到通知。確保適配器的內容不會從後臺線程修改,而只能從UI線程修改。確保您的適配器在其內容更改時調用notifyDataSetChanged()。[在ListView(2131427350,類android.widget.ListView)與Adapter(類censored.ui.adapters.ContactsAdapter)] – Smarty77 2014-11-04 21:39:54
您提到的函數的文檔「如果設置爲false,調用者必須手動調用notifyDataSetChanged()這些更改反映在附加視圖中,默認值爲true,並調用notifyDataSetChanged()將該標誌重置爲true。「似乎需要在調用notifyDataSetChanged()之後重置它。 – NameSpace 2014-11-05 08:22:04