最近做一個通訊錄項目遇到ListView從數據庫獲取數據並刷新UI顯示問題。在網上找資料都說用適配器的notifyDataSetChange()方法就可以,但是我調用這個方法UI界面並沒有及時刷新。問題如下:
首先,我的數據從數據庫獲得並用一個List對象list來接收,然后綁定到適配器上(list第一次從數據庫獲取數據),然后在對數據庫的數據進行一系列的增刪查改操作后,我再次調用獲取數據庫數據的方法,並將返回值賦值給list(list第二次獲取數據庫數據)(PS:這個時候從數據庫獲取到的數據已經改變)然后調用notifyDataSetChange()方法刷新數據,發現UI界面沒有及時更新,而需要再次進入界面才能刷新。
思考:數據源list的數據已經改變,為什么notifyDataSetChange()方法沒有起到應有的作用???
問題解決:后來,實在沒辦法,自己寫了一個Demo,發現用上述方法系統並不認為數據源的內容改變,因為我們並沒有對第一次獲取數據的list的內容進行直接的操作,比如:我們給數據庫插入了一條數據,然后我們用list去獲取數據庫全部數據,list的內容明顯比之前多了一條,但是,我們並沒有給之前的list添加該條數據,系統默認我們沒有對數據源list的內容進行改變。因此notifyDataSetChange()方法方法無法刷新界面。
解決方法:在對數據庫進行數據操作的同時,list除了第一次從數據庫獲取數據之外,不再直接從數據庫獲取數據,而是直接通過list的add()或者
remove()方法同步數據庫的數據。。。這樣才能調用notifyDataSetChange()方法來刷新界面。
(PS:才剛剛開始學習android... 說得不對的歡迎大家指導.... 謝謝。。)