關於ListView中notifyDataSetChanged()刷新數據不更新緣由

使用Listview的時候: 當要動態顯示更改後的數據(例如數據庫改動), 不少人應該都用過notifyDataSetChanged();這個方法來刷新Listview,顯示改後的數據. 

這時候就要注意了: 
                 ...... 
                 private ArrayList<HashMap<String, Object>> usersList; 
                 ...... 
                 usersList= query(......);     //根據查詢函數獲取一個ArrayList並賦值給綁定到Adapter的數據源usersList 
                 sAdapter.notifyDataSetChanged(); 
                 ...... 

           若是你也是:   上面這種形式去刷新ListView的數據的話, 是不能夠更新的. 必須改爲以下形式: 

                 ...... 
                //usersList= query(......);    
                 usersList.clear();  
                 usersList.addAll(query(......)); 
                 sAdapter.notifyDataSetChanged(); 

/////////////////////////////////////////////////////////////////////////////////////// 

         緣由是:    sAdapter會經過usersList獲取List中的內容。可是實際上可能(也應該)是,在調用super(MyActivity.this, R.layout.item, usersList)時sAdapter保存了usersList指向原List(假設爲List a)的引用,在調用query函數以後,usersList指向了一個新的List(List b)。可是在調用notifyDataSetChanged()時,sAdapter會跟據保存的引用(即指向List a的引用)去更新,所以固然仍是原來的結果,不會進行更新。 


若是你們也出現這種狀況能夠使用後者去刷新ListView, 應該就沒問題了 
相關文章
相關標籤/搜索