现在如果在百度找“startActivityForResult之后无法回调onActivityResult方法”得到的回答要么就是requestCode没有大于0,要么就是目标activity在invoke setResult方法以后没有finish,要么就是activity的launchMode问题,但是这里要讲的,是一种特例,下面开始:
I had an ActivityGroup managing sub-activities. One of the sub-activities called a similar external intent (external to my app). It never called the onActivityResult within the sub-activity that started it.
I finally figured out/remembered that the issue is because Android will only allow a nested layer of sub-activities...ie sub-activities can't nest sub-activitites. To solve this:
- call
getParent().startActivityForResult()
from your sub-activity
- your parent (the activitygroup) will be able to handle the
onActivityResult
. So I created a subclass of ActivityGroup
and handled this onActivityResult
.
- You can re-route that result back to the sub-activity if you need to. Just get the current activity by
getLocalActivityManager().getCurrentActivity()
. My sub-activities inherit from a custom activity so I added a handleActivityResult(requestCode, resultCode, data)
in that subclass for the ActivityGroup
to call.
当你有一个ActivityGroup管理了好几个activity时,如果其中一个activity调用startActivityForResult方法,那么,就永远无法回调到这个Activity的onActivityResult 方法,主要问题就出在(我靠,四级426的伤不起啊,勉强看吧)android只允许单层嵌套的activity去start然后回调,而activityGroup内部的activity是不可以的(如果有指正的,一定提出来啊,以上我是瞎编的),解决办法就是:
在startActivityForResult的前面加上getParent(),这样的话,activityGroup就会收到onActivityResult(),如果你需要在子activity中处理,可以重定向过去,通过在activityGroup中调用getLocalActivityManager().getCurrentActivity() 获取当前活动的activity,当然,在获得到这个activity以后是不能activity.onActivityResult()这样调用的,我这边是因为所有的activity都继承了一个暂且叫做CommonActivity吧,在
CommonActivity中写一个方法handleActivityResult( int requestCode, int resultCode, Intent data){onActivityResult(…………)}然后在ActivityGroup中调用这个方法就可以了,当然ActivityGroup也是继承了CommonActivity,简单的回调。
好了,到此结束。收工放假!以上翻译我心里有数,很多地方可能翻译不到位,但解决方法我试过是可以的,如果对翻译有看法,可以留言,大家共同进步!谢谢!
分享到:
相关推荐
基于RxPermissions框架思想,在使用startActivityForResult可以不重写onActivityResult回调
3个方法的介绍和使用 startActivityForResult(Intent intent, int requestCode ) onActivityResult(int requestCode ,int resultCode, Intent data) setResult(int resultCode,intent intent)
Fragment也可以使用startActivityForResult方法去打开一个Activity,然后在其onActivityResult方法中处理结果,可是当Fragment嵌套的时候,由于FragmentActivity的BUG导致只会回调最外那层Fragment的...
android startActivityForResult实现Acitvity的回调 最常见的登录运用.
singleTask和startActivityForResult的纠葛(activity的重建/onActivityResult回调为0) 问题验证: 1.startActivityForResult打开singleTask模式的活动,singTask失效。(见Action2) 2.singleTask模式的活动...
startActivityForResult过时.md
使用startActivityForResult回传数据
当我们调用startActivityForResult()方法来跳转页面的时候需要重写onActivityResult方法,不然就和startActivity没什么两样,这个demo就是简单说明调用时间。流程如下:MainActivity::onCreate MainActivity::...
Android之Intent通过startActivityForResult方法启动新Activity
介绍了StartActivityForResult的运用,并总结了一些问题及答案,可供初学者参考,代码无误,放心运行!
Android 页面回调跳转(startActivityForResult)
告别onActivityResult ,用代理实现获取startActivityForResult结果以及权限检查管理的工具类
关于startActivity被大家忽略的 Fragment中的startActivityForResult方法
startActivityForResult
一种 startActivityForResult 更简单流程
fragment 通过startActivityForResult方法启动另一个activity,返回时,不调用onActivityResult方法, 解决步骤: 1. 在Fragment所属的Activity中,重写了onActivityResult方法,确保加上super.onActivityResult ...
startActivityForResult获得通讯录中电话信息
优秀的代码设计:AndroidProject 对 startActivityForResult 的设计进行了改良,使得可以直接在方法上传入监听对象,这样我们就不需要重写 onActivityResult 方法来拿到回调,另外原生的 startActivityForResult 还...
startActivityForResult使用方式,代码比较简单