ufo22940268
V2EX  ›  Android

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

  •  
  •   ufo22940268 · Dec 5, 2014 · 14643 views
    This topic created in 4190 days ago, the information mentioned may be changed or developed.
    在 so 上问了,结果没能拿到答案,来万能的 V2试试

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

    之前我都在 activity b 中注册一个 broadcast,然后然后在 onDestroy 中 unregister,但是这样做每次都会报一个 warning,感觉很不爽,那用什么方法实现比较合适呢?
    14 replies    2014-12-07 23:27:52 +08:00
    luckyshq
        1
    luckyshq  
       Dec 5, 2014
    完全没必要用到广播.

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

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

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


    推荐第一种方法.
    luckyshq
        2
    luckyshq  
       Dec 5, 2014
    抱歉看反了 把上面的Activity A和B互换.
    hahastudio
        3
    hahastudio  
       Dec 5, 2014
    https://developer.android.com/training/basics/firstapp/starting-activity.html
    这个?

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

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

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

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