`
Drakedog
  • 浏览: 48660 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

startActivityForResult之后无法回调onActivityResult方法(ActivityGroup另解)

 
阅读更多

    现在如果在百度找“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:

  1. call getParent().startActivityForResult() from your sub-activity
  2. your parent (the activitygroup) will be able to handle the onActivityResult. So I created a subclass of ActivityGroup and handled this onActivityResult.
  3. 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,简单的回调。

好了,到此结束。收工放假!以上翻译我心里有数,很多地方可能翻译不到位,但解决方法我试过是可以的,如果对翻译有看法,可以留言,大家共同进步!谢谢!

分享到:
评论

相关推荐

    Android-基于RxPermissions框架思想在使用startActivityForResult可以不重写onActivityResult回调

    通常情况下,当从子Activity返回时,我们需要重写`onActivityResult`回调来处理返回的数据。然而,随着RxJava的普及,开发者开始寻找更加优雅的方式来处理这种场景,这就是`RxPermissions`框架思想的应用。`...

    startActivityForResult+onActivityResult+setResult

    3个方法的介绍和使用 startActivityForResult(Intent intent, int requestCode ) onActivityResult(int requestCode ,int resultCode, Intent data) setResult(int resultCode,intent intent)

    Android中Fragment多层嵌套时onActivityResult无法正确回调问题的解决方法

    但是,在使用Fragment进行多层嵌套时,常常会遇到一个问题:通过startActivityForResult启动Activity,然后希望在Fragment的onActivityResult中接收结果,但是只有最外层的Fragment能够接收到回调,而内嵌的Fragment...

    OnActivityResult

    在`ActivityGroup`中,一个常见的问题是子Activity无法正常处理`OnActivityResult()`回调。当子Activity启动另一个Activity并期待返回结果时,这个结果通常由`onActivityResult()`方法处理。然而,在`ActivityGroup`...

    StartActivityForResult

    在Android应用开发中,`StartActivityForResult`是一个关键的组件交互方法,用于在一个Activity(活动)启动另一个Activity并期望得到返回结果。这个方法允许开发者在应用程序的不同组件之间传递数据,通常用于实现...

    android之activity的生命周期和launchMode、onActivityResult方法的作用

    当一个Activity启动另一个Activity并期望得到结果时,可以使用startActivityForResult()方法启动新Activity,并在新Activity中调用setResult()设置返回结果。当新Activity结束时,系统会调用源Activity的...

    Android onActivityResult和setResult方法详解及使用

    在Android应用程序开发中,`onActivityResult()` 和 `setResult()` 方法是两个非常关键的组件,它们用于在不同的Activity之间传递数据和控制流程。当我们需要从一个Activity启动另一个Activity并期待返回结果时,这...

    ActivityForResult实现Activity回调

    除了`Activity`之间的交互,`Fragment`也可以通过`startActivityForResult()`启动`Activity`并接收结果,其回调方法同样在`Fragment`中实现,但需要重写`onActivityResult()`。 ### 结论 `startActivityForResult...

    Java/Android回调机制小示例

    例如,当我们从一个Activity启动另一个Activity并希望在后者返回结果时进行处理,可以使用`startActivityForResult()`方法,并在原始Activity中重写`onActivityResult()`方法,这就是一个简单的回调应用场景。...

    Android中onActivityResult的用法

    Android 中的 onActivityResult 是一个非常重要的回调函数,它允许活动之间进行数据交互。下面我们将详细介绍 onActivityResult 的用法和实现原理。 一、什么是 onActivityResult? --------------- ...

    onActivityResult传值的使用

    3. **data**:这是 `Intent` 类型的参数,用于传递数据回调。如果启动的Activity产生了数据(例如,用户选择了一张图片),这些数据就会封装在这个Intent里。 使用`onActivityResult` 的基本步骤如下: 1. **启动...

    startActivityForResult的详细用法

    在Android应用开发中,`startActivityForResult`是一个非常重要的方法,它允许我们在启动一个Activity时传递数据,并在那个Activity执行完后返回结果到调用它的Activity。这个过程涉及到Intent、生命周期管理和数据...

    startActivityForResult intent 跳转相关的

    这个方法允许我们启动一个新的Activity,并在它完成之后得到回调,从而实现数据的传递。这篇博客文章《startActivityForResult intent 跳转相关的》可能详细探讨了这个方法的工作原理以及在实际开发中的应用。 首先...

    页面跳转(回调)

    总结来说,Android的页面跳转(回调)是通过`startActivityForResult()`和`onActivityResult()`来实现的,这两个方法配合Intent构建了一种数据和控制流的机制,使得Activity间能够有效地通信和协作。理解并熟练运用...

    activity的回调

    3. **启动另一个Activity并接收结果**:当Activity A启动Activity B时,可以使用`startActivityForResult()`方法,并传入一个请求码。在Activity B中,可以通过`setResult()`方法设置结果码和要返回的数据,然后使用...

    startActivityForResult你所不知道的---Fragment

    当目标`Activity`完成其任务后,会回调`Fragment`中的`onActivityResult()`方法,将结果传回。这对于执行需要用户交互的任务,如选择图片、获取位置信息等场景非常有用。 首先,让我们深入了解一下`...

    快速解决fragment中onActivityResult不调用的问题

    这意味着,如果在Activity的`onResume`之前启动子Activity,或者在`onPause`之后启动,可能会导致结果无法传递回Fragment。 2. **调用方式错误**:在Fragment中启动子Activity时,如果使用`getActivity()....

Global site tag (gtag.js) - Google Analytics