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 里加上标识吗?

activity Android

WingHCC 10 years, 3 months ago

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

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

ranky answered 10 years, 3 months ago

Your Answer