V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ufo22940268
V2EX  ›  Android

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

  •  
  •   ufo22940268 · 2014-12-05 09:49:48 +08:00 · 10141 次点击
    这是一个创建于 3640 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在 so 上问了,结果没能拿到答案,来万能的 V2试试

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

    之前我都在 activity b 中注册一个 broadcast,然后然后在 onDestroy 中 unregister,但是这样做每次都会报一个 warning,感觉很不爽,那用什么方法实现比较合适呢?
    14 条回复    2014-12-07 23:27:52 +08:00
    luckyshq
        1
    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
        2
    luckyshq  
       2014-12-05 09:57:38 +08:00
    抱歉看反了 把上面的Activity A和B互换.
    hahastudio
        3
    hahastudio  
       2014-12-05 10:08:09 +08:00
    https://developer.android.com/training/basics/firstapp/starting-activity.html
    这个?

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

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

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

    对于二三为什么要flag? 默认全部设为那个值就不行了,虽然读写数据库/文件会有开销,但总比用广播好吧.
    iptux
        6
    iptux  
       2014-12-05 10:19:44 +08:00
    你们都不用Application单例共享数据么?
    ufo22940268
        7
    ufo22940268  
    OP
       2014-12-05 10:23:09 +08:00
    @luckyshq 比如说还是B->C->A这样的流程,我们在 A 上登录了,那么这时候退回到 B 上的时候就要判断用户登录状态有没有改变。如果改变了,就需要重新加载数据,如果没有改变,就不需要重新加载
    luckyshq
        8
    luckyshq  
       2014-12-05 10:24:44 +08:00
    @iptux 数据量小的时候可以,数据量大了太占内存,而且不能跨进程跨应用.
    luckyshq
        9
    luckyshq  
       2014-12-05 10:33:51 +08:00
    @ufo22940268 我觉得没必要这样判断,每次回到B就直接重新加载最新的数据就行了,如果你觉得读写数据库/文件开销大了就用个全局静态变量来存取咯.
    jedyu
        10
    jedyu  
       2014-12-05 10:37:54 +08:00
    EventBus
    CtrlSpace
        11
    CtrlSpace  
       2014-12-05 11:24:23 +08:00
    B要显示时在onResume()中判断是否登陆,然后加载UI数据不就得了。
    哪里不对?
    tudoubudou
        12
    tudoubudou  
       2014-12-05 12:17:42 +08:00
    11楼的说的没错,onResume判断一下不久可以了?
    zakk1120
        13
    zakk1120  
       2014-12-06 11:04:56 +08:00
    otto,解耦合
    hounychang
        14
    hounychang  
       2014-12-07 23:27:52 +08:00
    弃用广播很久了,一直用EventBus
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2802 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 12:57 · PVG 20:57 · LAX 04:57 · JFK 07:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.