实现活动A在启动活动B后,当B销毁时通知活动A

126 阅读2分钟

背景

在活动A中通过tablayout实现点击某一个tab选项时,切换相应绑定的fragment,我所遇到的情况是当点击某一选项b后并不切换相应fragment,而是打开一个新的活动B,当该活动销毁时,回到tablayout中第一个选项a,并显示相应的fragment(以下简称为“首页”)。

问题

通过判断当前即将打开的fragment是否是需要被替换为活动B的,实现一个分支选择,true的分支打开活动B,false的分支正常执行切换相应的fragment逻辑。 问题在于,当活动B销毁时,需要回到首页,怎样通知活动A活动B已销毁,且切换到首页呢?

我的方法

这里提供一种简单的方法:使用startActivityForResult()。
我们知道startActivityForResult()可以实现活动A 启动 活动B,在活动B中setResult()通过Intent传递数据回上一个活动,即A活动,A重写onActivityResult()方法来得到返回的数据。 (具体使用方法请查阅相关资料,这里不详细说明)
这里我们并不真的使用其传递数据的功能,只用来向活动A传递活动B的销毁状态信息,在B的返回按键监听响应逻辑中,在调用finish()销毁本活动前,setResult(),甚至不用向Intent中保存任何数据(用不到嘛)。在活动A的onActivityResult()方法中编写切换到首页逻辑即可实现。(这里我有遇到点问题:虽然显示了tab首页选项按钮为选中状态,并显示首页fragment,但是实际上监听tablayout选项的“指示器”(具体不知道叫什么)还是在选项c上,此时立刻点击c选项指示器会认为当前已在c选项上不作动作,更不会触发分支选择true的逻辑调到活动B,因此我这里重写了onTabReselected()方法,判断是否是c,如果是c执行跳转活动B的逻辑,别的选项仍不做动作)