怎么在 activity a 中更新 activity b 的 ui

2014-12-05 09:49:48 +08:00
 ufo22940268
在 so 上问了,结果没能拿到答案,来万能的 V2试试

比如说我在 activity a 中登录了,现在 activity b 在后台。那么这时候我想更新 activity b 的界面,这该怎么办呢?

之前我都在 activity b 中注册一个 broadcast,然后然后在 onDestroy 中 unregister,但是这样做每次都会报一个 warning,感觉很不爽,那用什么方法实现比较合适呢?
10145 次点击
所在节点    Android
14 条回复
luckyshq
2014-12-05 09:56:35 +08:00
完全没必要用到广播.

方法1:
* Activity A 用startActivityForResult()启动Activity B ,然后你把要更新的数据传回到Activity A中.
之后在在A中的onActivityResult里处理界面更新.

方法2:
* 用文件进行数据共享,并在Activity A中的Onstart里更新界面.

方法3:
* 用数据库进行数据共享,并在Activity A中Onstart里更新界面.


推荐第一种方法.
luckyshq
2014-12-05 09:57:38 +08:00
抱歉看反了 把上面的Activity A和B互换.
hahastudio
2014-12-05 10:08:09 +08:00
https://developer.android.com/training/basics/firstapp/starting-activity.html
这个?

我记得好像 samples 里面还有一个是在多个 activities 切换的= =
ufo22940268
2014-12-05 10:08:44 +08:00
@luckyshq 方法一不成立,因为也许 activity 的跳转是B->C->A

现在我们来研究下方法二和方法三,如果按照这两个这么做的话,那么我们要记录一个数据有没有变化的 flag,总感觉很难管理的样子。
luckyshq
2014-12-05 10:14:38 +08:00
@ufo22940268 多谢指点.

方法一看情况用吧 毕竟楼主也没说明具体情况.

对于二三为什么要flag? 默认全部设为那个值就不行了,虽然读写数据库/文件会有开销,但总比用广播好吧.
iptux
2014-12-05 10:19:44 +08:00
你们都不用Application单例共享数据么?
ufo22940268
2014-12-05 10:23:09 +08:00
@luckyshq 比如说还是B->C->A这样的流程,我们在 A 上登录了,那么这时候退回到 B 上的时候就要判断用户登录状态有没有改变。如果改变了,就需要重新加载数据,如果没有改变,就不需要重新加载
luckyshq
2014-12-05 10:24:44 +08:00
@iptux 数据量小的时候可以,数据量大了太占内存,而且不能跨进程跨应用.
luckyshq
2014-12-05 10:33:51 +08:00
@ufo22940268 我觉得没必要这样判断,每次回到B就直接重新加载最新的数据就行了,如果你觉得读写数据库/文件开销大了就用个全局静态变量来存取咯.
jedyu
2014-12-05 10:37:54 +08:00
EventBus
CtrlSpace
2014-12-05 11:24:23 +08:00
B要显示时在onResume()中判断是否登陆,然后加载UI数据不就得了。
哪里不对?
tudoubudou
2014-12-05 12:17:42 +08:00
11楼的说的没错,onResume判断一下不久可以了?
zakk1120
2014-12-06 11:04:56 +08:00
otto,解耦合
hounychang
2014-12-07 23:27:52 +08:00
弃用广播很久了,一直用EventBus

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/151660

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX