有时候我们在界面对数据进行操作(如修改、删除),而在另一个页面也要进行相应的修改,但我们返回另一个页面的时候,它还是原来的样子(要的就是这样,因为我只是去别的页面做些操作而已,这个页面的信息我还是要看的,而这里要说的就是一些小的修改,如名字、某个标记的改变)。
就拿自己做的词典来说吧,这个词典浏览的时候有两个模式,一个列表,一个类似卡片的,当我们在列表浏览到一半的时候,我突然想看看卡片的效果,这时,我们就转到卡片模式,在卡片模式中我们浏览浏览,然后我就收藏了一个单词(收藏成功星星会亮)而这个单词正好在列表模式的时候它显示在哪里(星星没有亮的),这时候我们要回到列表了(用的是相当于返回上一页一样的方法),这时候回来我们会看到刚刚收藏的单词的收藏标记(星星)没有改变,这样就很尴尬了……
解决办法就是利用引用,取得另一个页面的控件,而当在本页面修改时就通知另一个页面的控件更新。
先说listview的更新;刚开始做的时候,我是直接在Item里用View取得控件然后直接修改控件的内容,但是上下拉之后,还是变成原来的样子了,原来是listview每显示一个Item就会调用一次getView(),而之前我只是修改了界面控件的值,并没有修改listview的数据源,所以就算我修改了数据库,listview的数据源还是原来查询出来的值。
对listview的数据源list的数据修改之后执行
- MyAdapter myAdapter = New MyAdapter ();
- myAdapter = (MyAdapter) listView.getAdapter();
- myAdapter .notifyDataSetChanged();
MyAdapter myAdapter = New MyAdapter ();
myAdapter = (MyAdapter) listView.getAdapter();
myAdapter .notifyDataSetChanged();
取得另一个页面的控件,而当在本页面修改时就通知另一个页面的控件更新:
ActivityA页:
- //注:INSTANCE 是ActivityB的一个静态变量static ActivityB INSTANCE;INSTANCE=this;
- ActivityB.INSTANCE.getImageView().setImageResource(imID);//修改值
- ActivityB.INSTANCE.getImageView().invalidate();//通知更新
- //如果用到listview和list资源数组,一定要连list也一起修改
- //如:ActivityB.getList().get(0).put("name", value);
- //记得通知listview用notifyDataSetChanged()更新
//注:INSTANCE 是ActivityB的一个静态变量static ActivityB INSTANCE;INSTANCE=this;
ActivityB.INSTANCE.getImageView().setImageResource(imID);//修改值
ActivityB.INSTANCE.getImageView().invalidate();//通知更新
//如果用到listview和list资源数组,一定要连list也一起修改
//如:ActivityB.getList().get(0).put("name", value);
//记得通知listview用notifyDataSetChanged()更新