从Fragment跳转其他Activity填写数据返回后如何刷新或召回父Activity
实现返回后刷新父页面的几种方案
方案1:使用Activity Result API(官方推荐)
这是最适合当前场景的实现方式:
- 在跳转至子Activity的Fragment中注册Activity Result回调,回调触发后直接调用当前Fragment的列表适配器
notifyDataSetChanged()方法刷新列表即可;如果修改的数据需要同步到其他Tab,可通过父Activity的公共方法获取对应Tab的Fragment实例,调用对应刷新逻辑 - 子Activity完成模型数据设置后,调用
setResult(RESULT_OK)再执行finish()返回即可
注意:旧版
startActivityForResult已被AndroidX废弃,优先使用Activity Result API实现,无需手动维护请求码,代码更易维护
方案2:重写onResume生命周期方法实现刷新
如果不需要传递额外参数,仅需要返回后刷新,可选择该方案:
- 重写对应Fragment或者父Activity的
onResume方法,在方法内拉取最新的模型数据,调用列表刷新逻辑即可 - 为了避免每次回到页面都执行无效刷新,可以新增一个全局布尔标记位,子Activity修改完数据后将标记位设为
true,onResume中仅当标记位为true时执行刷新,刷新完成后将标记位复位为false即可
适配你的场景:因为5个Tab复用同一个Fragment,刷新时可以通过ViewPager的
getCurrentItem()方法拿到当前展示的Tab位置,仅刷新当前可见的Fragment,减少性能损耗
方案3:事件通知实现(适合多Tab同步刷新场景)
如果修改数据后需要同步更新多个Tab的内容,可以用事件通知方案:
- 自定义一个数据更新的事件类
- 所有需要响应数据变更的Fragment/父Activity中注册事件观察者
- 子Activity完成数据修改后发送对应事件,所有观察者收到事件后执行各自的刷新逻辑
可选实现:项目没有引入EventBus的话,用Android自带的
LocalBroadcastManager也可以实现本地广播通知,无需额外引入依赖
内容的提问来源于stack exchange,提问作者Simran Inamdar
相关产品推荐
相关产品推荐

