Android活动栈A->B->C,C用startActivity往回A跳转的纠结问题
阿神
阿神 2017-04-17 11:58:03
[Android讨论组]

已有活动栈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_CANCELEDdata为空引用。没有data可不行啊!我很需要返回数据的!

之后A的另一个回调方法onNewIntent(Intent intent)启动,这次就可以拿到返回数据intent了,但是这个方法却没了请求码requestCode,无从判断是从哪个分支返回的。

总结一下:一个回调方法能判断是从哪来的,但是却拿不到数据;另一个方法拿得到返回数据却不知道从哪返回的。我该怎么办呢?只能让C和E在返回的intent里加上标识吗?

阿神
阿神

闭关修行中......

全部回复(2)
巴扎黑

从C到A得到的data为空是因为C并不是通过正常的finish()方法来结束的,而是因为Intent.FLAG_ACTIVITY_CLEAR_TOP才结束的。同时,onActivityResult()只能隔一层使用,如果想把C的数据通过setResult()的方式返回到A,可以逐级调用onActivityResult()

其实题主可以完全放弃使用startActivityForResult(),把Activity之间的数据传递(包括题主所说的标识)统一放到Intent中,这样对于程序的解耦也更有利。

迷茫

十分感谢你,这问题困扰很久了,再次谢谢

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号