使用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, 应该就没问题了