在一个Activity里更新另一个Activity UI

我的使用场景是有一个列表,点击某项后,进入详情页。在详情页,对该项的数据可能会进行若干更改,回到原来的列表项,要求列表项的数据得到更新。

想了如下几种可能的解决办法:

  1. 如果数据能存储在本地数据库的话,那么可以先把数据封装到ContentProvider,然后列表页通过Loader方式加载数据,详情页用ContentObserver的方式的方式修改数据。简单的数据存储在SharedPreference的话,也可以这种监听文件数据改变的方式处理。但是这个限制是数据是在本地存储的。我的数据来自网络,暂时不打算在本地做持久化。
  2. 把数据列表的Adapter共享出来,在详情页操作后,一方面更新网络上报,一方面notify,直接传递单项的数据对象到列表里。但这种暴露全局数据的方式貌似不好。
  3. 两个Activity共享Handler, 比如,共同继承的基类里构造一个共有的Handler,在详情页操作后,发出消息,让列表页去响应。这样还需要共享一个全局数据对象。
  4. 列表Activity直接提供静态方法供详情页调用
  5. 改成startActivityForResult, 每个更改操作后修改当前数据对象,拦截返回键,触发setResult,Intent的方式回传数据
  6. LocalBroadcastReceiver, 监听器真是万能的,在详情页发出广播即可,列表接受到进行更新操作,也是Intent传数据,数据对象大的话,可能效率会有影响。
  7. 打算学习下Rxjava,实现这个功能试试。广播器能做的,RxJava都能做吧
    (http://blog.csdn.net/wangkai0681080/article/details/50216703)

以上方法参考了网络,实际最后采用的是6,因为列表页我是在Activity里的Fragment里再嵌套的Fragment,用5的话还需要再处理onActivityResult接收不到的问题。后续打算改成1,数据可以缓存在本地数据库,但这需要服务端配合才有意义,网络请求时把上次存储数据的时间带上,没有更改的话,就用本地的。但Volley其实已经做了这事了……待

Case 2:当我们从一个Activity启动了一个Fragment,然后在这个Fragment中又去实例化了一些子Fragment,在子Fragment中去有返回的启动了另外一个Activity,即通过startActivityForResult方式去启动,这时候造成的现象会是,子Fragment接收不到OnActivityResult,如果在子Fragment中是以getActivity.startActivityForResult方式启动,那么只有Activity会接收到OnActivityResult,如果是以getParentFragment.startActivityForResult方式启动,那么只有父Fragment能接收(此时Activity也能接收),但无论如何子Fragment接收不到OnActivityResult
http://www.tuicool.com/articles/2eM32a

你可能感兴趣的:(Android)