首页 > 代码库 > 8-22发现的一点小问题(在“引用”上出的问题)
8-22发现的一点小问题(在“引用”上出的问题)
今天写程序是发现了一点小纰漏:
程序的大体结构如下:
Public class act extends Activity {
//保存数据的list
Private ArrayList<T> listInAct = null;
Private ListView listView = null;
}
Public void onCreate(Bundle b){
listInAct = new ArrayList<T>();
.................................
MyBaseAdapter adapter = new MyBaseAdapter( this , listInAct );
listView .setAdapter( adapter );
}
这样把数据就加到了ListView中。
Public class MyBaseAdapter{
Private ArrayList<T> listInAdapter = null;
.......................................................
Public MyBaseAdapter( Context c , ArrayList<T> list){
this.listInAdapter = list;
........................................
}
}
接下来想实现这样的功能:ListView中要用的数据时存在数据库中的。 在另一个activity中向数据库中添加数据,当返回ListView所在的activity时 , ListView的内容要动态更新。
所以,我重写了 ListView 所在的activity的onStart()方法
Public void onStart(){
super.onStart();
listInAct = //从数据库中提取数据(返回一个 ArrayList<T>)。
adapter.notifyDataSetChanged();
}
但是,当时机运行时却发现:没用,ListView的内容死活不更新。
经过老师的指点,最后发现了问题所在。
问题分析过程:ListView没有更新的原因一定是notifyDataSetChanged()没有被调用。notifyDataSetChanged() 没被调用 一定是adapter中的数据:listInAdapter没有发生变化。Why listInAdapter not be changed ?
问题的根本原因是:当从新增的activity返回ListView所在的activity是。确实调用了onStart()方法, listInAct 确实被更新了。但是!!!,listInAct 被更新了不代表adapter中的 listInAdapter 也被更新了。当返回时。listInAct 被指向了另一个ArrayList<T>。但是listInAdapter 还是指向原有的 ArrayList<T>
修改方法:只需要改动Act的onStart ( ) :
private void onStart(){
listInAct
}
Public void onStart(){
super.onStart();
listInAct.clear();
listInAct.addAll(dao.selectAllLinkMan());
adapter.notifyDataSetChanged();
}
经过这样的修改。listInAct 与 listInAdapter 始终是指向同一个ArrayList<T> 的。
listInAct 的内容变了也就定同于 listInAdapter 的内容变了。
至此:问题解决。
8-22发现的一点小问题(在“引用”上出的问题)