现在如果在百度找“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,简单的回调。
好了,到此结束。收工放假!以上翻译我心里有数,很多地方可能翻译不到位,但解决方法我试过是可以的,如果对翻译有看法,可以留言,大家共同进步!谢谢!
分享到:
相关推荐
通常情况下,当从子Activity返回时,我们需要重写`onActivityResult`回调来处理返回的数据。然而,随着RxJava的普及,开发者开始寻找更加优雅的方式来处理这种场景,这就是`RxPermissions`框架思想的应用。`...
3个方法的介绍和使用 startActivityForResult(Intent intent, int requestCode ) onActivityResult(int requestCode ,int resultCode, Intent data) setResult(int resultCode,intent intent)
但是,在使用Fragment进行多层嵌套时,常常会遇到一个问题:通过startActivityForResult启动Activity,然后希望在Fragment的onActivityResult中接收结果,但是只有最外层的Fragment能够接收到回调,而内嵌的Fragment...
在`ActivityGroup`中,一个常见的问题是子Activity无法正常处理`OnActivityResult()`回调。当子Activity启动另一个Activity并期待返回结果时,这个结果通常由`onActivityResult()`方法处理。然而,在`ActivityGroup`...
在Android应用开发中,`StartActivityForResult`是一个关键的组件交互方法,用于在一个Activity(活动)启动另一个Activity并期望得到返回结果。这个方法允许开发者在应用程序的不同组件之间传递数据,通常用于实现...
当一个Activity启动另一个Activity并期望得到结果时,可以使用startActivityForResult()方法启动新Activity,并在新Activity中调用setResult()设置返回结果。当新Activity结束时,系统会调用源Activity的...
在Android应用程序开发中,`onActivityResult()` 和 `setResult()` 方法是两个非常关键的组件,它们用于在不同的Activity之间传递数据和控制流程。当我们需要从一个Activity启动另一个Activity并期待返回结果时,这...
除了`Activity`之间的交互,`Fragment`也可以通过`startActivityForResult()`启动`Activity`并接收结果,其回调方法同样在`Fragment`中实现,但需要重写`onActivityResult()`。 ### 结论 `startActivityForResult...
例如,当我们从一个Activity启动另一个Activity并希望在后者返回结果时进行处理,可以使用`startActivityForResult()`方法,并在原始Activity中重写`onActivityResult()`方法,这就是一个简单的回调应用场景。...
Android 中的 onActivityResult 是一个非常重要的回调函数,它允许活动之间进行数据交互。下面我们将详细介绍 onActivityResult 的用法和实现原理。 一、什么是 onActivityResult? --------------- ...
3. **data**:这是 `Intent` 类型的参数,用于传递数据回调。如果启动的Activity产生了数据(例如,用户选择了一张图片),这些数据就会封装在这个Intent里。 使用`onActivityResult` 的基本步骤如下: 1. **启动...
在Android应用开发中,`startActivityForResult`是一个非常重要的方法,它允许我们在启动一个Activity时传递数据,并在那个Activity执行完后返回结果到调用它的Activity。这个过程涉及到Intent、生命周期管理和数据...
这个方法允许我们启动一个新的Activity,并在它完成之后得到回调,从而实现数据的传递。这篇博客文章《startActivityForResult intent 跳转相关的》可能详细探讨了这个方法的工作原理以及在实际开发中的应用。 首先...
总结来说,Android的页面跳转(回调)是通过`startActivityForResult()`和`onActivityResult()`来实现的,这两个方法配合Intent构建了一种数据和控制流的机制,使得Activity间能够有效地通信和协作。理解并熟练运用...
3. **启动另一个Activity并接收结果**:当Activity A启动Activity B时,可以使用`startActivityForResult()`方法,并传入一个请求码。在Activity B中,可以通过`setResult()`方法设置结果码和要返回的数据,然后使用...
当目标`Activity`完成其任务后,会回调`Fragment`中的`onActivityResult()`方法,将结果传回。这对于执行需要用户交互的任务,如选择图片、获取位置信息等场景非常有用。 首先,让我们深入了解一下`...
这意味着,如果在Activity的`onResume`之前启动子Activity,或者在`onPause`之后启动,可能会导致结果无法传递回Fragment。 2. **调用方式错误**:在Fragment中启动子Activity时,如果使用`getActivity()....