`
250367976
  • 浏览: 25955 次
社区版块
存档分类
最新评论

Android学习笔记之界面更新(一对N)

阅读更多

有时候我们在界面对数据进行操作(如修改、删除),而在另一个页面也要进行相应的修改,但我们返回另一个页面的时候,它还是原来的样子(要的就是这样,因为我只是去别的页面做些操作而已,这个页面的信息我还是要看的,而这里要说的就是一些小的修改,如名字、某个标记的改变)。

就拿自己做的词典来说吧,这个词典浏览的时候有两个模式,一个列表,一个类似卡片的,当我们在列表浏览到一半的时候,我突然想看看卡片的效果,这时,我们就转到卡片模式,在卡片模式中我们浏览浏览,然后我就收藏了一个单词(收藏成功星星会亮)而这个单词正好在列表模式的时候它显示在哪里(星星没有亮的),这时候我们要回到列表了(用的是相当于返回上一页一样的方法),这时候回来我们会看到刚刚收藏的单词的收藏标记(星星)没有改变,这样就很尴尬了……

解决办法就是利用引用,取得另一个页面的控件,而当在本页面修改时就通知另一个页面的控件更新。

先说listview的更新;刚开始做的时候,我是直接在Item里用View取得控件然后直接修改控件的内容,但是上下拉之后,还是变成原来的样子了,原来是listview每显示一个Item就会调用一次getView(),而之前我只是修改了界面控件的值,并没有修改listview的数据源,所以就算我修改了数据库,listview的数据源还是原来查询出来的值。
对listview的数据源list的数据修改之后执行

Java代码 复制代码
  1. MyAdapter myAdapter = New MyAdapter ();
  2. myAdapter = (MyAdapter) listView.getAdapter();
  3. myAdapter .notifyDataSetChanged();
MyAdapter myAdapter = New MyAdapter ();
myAdapter = (MyAdapter) listView.getAdapter();
myAdapter .notifyDataSetChanged();

 

取得另一个页面的控件,而当在本页面修改时就通知另一个页面的控件更新:

ActivityA页:

Java代码 复制代码
  1. //注:INSTANCE 是ActivityB的一个静态变量static ActivityB INSTANCE;INSTANCE=this;
  2. ActivityB.INSTANCE.getImageView().setImageResource(imID);//修改值
  3. ActivityB.INSTANCE.getImageView().invalidate();//通知更新
  4. //如果用到listview和list资源数组,一定要连list也一起修改
  5. //如:ActivityB.getList().get(0).put("name", value);
  6. //记得通知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()更新

 

0
5
分享到:
评论
3 楼 250367976 2013-06-19  
好吧,,现在我知道很多方法可以,现在这个适合初学者,,容易理解(我是这样认为的),不过我还是觉得这个好
2 楼 250367976 2013-05-24  
shenglongq 写道
这种方式太垃圾了

那有什么方法高级点
1 楼 shenglongq 2013-05-24  
这种方式太垃圾了

相关推荐

Global site tag (gtag.js) - Google Analytics