說明:
舊的數據源是通過構造方法傳值傳過來的。
新的數據源是通過請求服務器獲取的。
這個時候,我用list = newlist來把newlist的數據交給list,再調用notifyDataSetChanged這個方法來通知listview更新數據,結果頁面的數據沒有刷新。
原因:
就是list的指向已經改變,它也指向newlist指向的那個內存。而調用notifyDataSetChanged會去檢查原來list指向的數據是否變化,但是這時的list已經不是原來的list了,所以它無法判斷,只能不作出響應了。那么,這個問題的解決方法是直接在原來的list上面更改數據,可以使用下面的代碼來操作:
list.clear();
list.addAll(newlist);
adapter.notifyDataSetChanged();
這樣,list的指向就不會改變,它還是指向原來那塊內存,這樣調用notifyDataSetChanged()就可以起作用了。
總結:
在這里的重點就是要注意在開始時傳給ListView的list指向不能被改變,需要從始至終指向同一個內存,這樣調用notifyDataSetChanged后就能夠檢測到list的數據變化,從而觸發ListView的重新繪制了!