在一个Activity里更新另一个Activity UI
2015-11-28 13:25
495 查看
我的使用场景是有一个列表,点击某项后,进入详情页。在详情页,对该项的数据可能会进行若干更改,回到原来的列表项,要求列表项的数据得到更新。
想了如下几种可能的解决办法:
如果数据能存储在本地数据库的话,那么可以先把数据封装到ContentProvider,然后列表页通过Loader方式加载数据,详情页用ContentObserver的方式的方式修改数据。简单的数据存储在SharedPreference的话,也可以这种监听文件数据改变的方式处理。但是这个限制是数据是在本地存储的。我的数据来自网络,暂时不打算在本地做持久化。
把数据列表的Adapter共享出来,在详情页操作后,一方面更新网络上报,一方面notify,直接传递单项的数据对象到列表里。但这种暴露全局数据的方式貌似不好。
两个Activity共享Handler, 比如,共同继承的基类里构造一个共有的Handler,在详情页操作后,发出消息,让列表页去响应。这样还需要共享一个全局数据对象。
列表Activity直接提供静态方法供详情页调用
改成startActivityForResult, 每个更改操作后修改当前数据对象,拦截返回键,触发setResult,Intent的方式回传数据
LocalBroadcastReceiver, 监听器真是万能的,在详情页发出广播即可,列表接受到进行更新操作,也是Intent传数据,数据对象大的话,可能效率会有影响。
打算学习下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
想了如下几种可能的解决办法:
如果数据能存储在本地数据库的话,那么可以先把数据封装到ContentProvider,然后列表页通过Loader方式加载数据,详情页用ContentObserver的方式的方式修改数据。简单的数据存储在SharedPreference的话,也可以这种监听文件数据改变的方式处理。但是这个限制是数据是在本地存储的。我的数据来自网络,暂时不打算在本地做持久化。
把数据列表的Adapter共享出来,在详情页操作后,一方面更新网络上报,一方面notify,直接传递单项的数据对象到列表里。但这种暴露全局数据的方式貌似不好。
两个Activity共享Handler, 比如,共同继承的基类里构造一个共有的Handler,在详情页操作后,发出消息,让列表页去响应。这样还需要共享一个全局数据对象。
列表Activity直接提供静态方法供详情页调用
改成startActivityForResult, 每个更改操作后修改当前数据对象,拦截返回键,触发setResult,Intent的方式回传数据
LocalBroadcastReceiver, 监听器真是万能的,在详情页发出广播即可,列表接受到进行更新操作,也是Intent传数据,数据对象大的话,可能效率会有影响。
打算学习下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
相关文章推荐
- UITableView 常用方法列表
- 常用UIButton控件的属性列表
- Easy UI datagrid的使用
- 95 Unique Binary Search Trees II
- UITableViewCell、cell 复用机制
- mui禁止滚动条和禁止滚动
- Arduino-DFRduino 4WD机器车平台安装
- nyoj Vawio Sequence 763 (STL) LIS变型
- StringBuilder
- 第二十九节 MT-iBeacon基站关于LightBlue软件的使用
- hdoj 5568 sequence2 【dp + 高精度】
- hdoj 5567 sequence1 【水题】
- Ant打包报错 build.xml:601: The following error occurred while executing this line
- UILabel的一些常用属性、NSAttributedString属性字符串
- easyui的textbox和validatebox的 赋值
- duilib 入门二之 HorizontalLayout与VerticalLayout
- la4255 Guess 差分约束
- UI-Label自动垂直滚动字幕
- 142 Which two statements are true about encrypting RMAN backup? (Choose two.) A. The transparent enc
- Arduino- 编译引用 IRremote 出现 error: ‘TKD2′ was not declared in this scope