首页 > 代码库 > 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发现的一点小问题(在“引用”上出的问题)