Android活动栈A->B->C,C用startActivity往回A跳转的纠结问题
已有活动栈A->B->C和A->D->E,启动方式均为startActivityforResult(i, requestCode)
,现在C和E要跳转回A,而且由于现实因素不能用逐级finish()
,只能一次性startActivity(intent)
回A,intent
里有重要数据并且让intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP)
。
现在问题来了(不是挖掘机):
A的回调方法onActivityResult(int requestCode, int resultCode, Intent data)
可以拿到当初设置的requestCode
,这样可以让我判断是从B还是D之中哪个分支跳回的,但是resultCode
的值为RESULT_CANCELED
且data
为空引用。没有data
可不行啊!我很需要返回数据的!
之后A的另一个回调方法onNewIntent(Intent intent)
启动,这次就可以拿到返回数据intent
了,但是这个方法却没了请求码requestCode
,无从判断是从哪个分支返回的。
总结一下:一个回调方法能判断是从哪来的,但是却拿不到数据;另一个方法拿得到返回数据却不知道从哪返回的。我该怎么办呢?只能让C和E在返回的intent
里加上标识吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
从C到A得到的
data
为空是因为C并不是通过正常的finish()
方法来结束的,而是因为Intent.FLAG_ACTIVITY_CLEAR_TOP
才结束的。同时,onActivityResult()
只能隔一层使用,如果想把C的数据通过setResult()
的方式返回到A,可以逐级调用onActivityResult()
。其实题主可以完全放弃使用
startActivityForResult()
,把Activity
之间的数据传递(包括题主所说的标识)统一放到Intent
中,这样对于程序的解耦也更有利。十分感谢你,这问题困扰很久了,再次谢谢