`
fantaxy025025
  • 浏览: 1302823 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

startActivityForResult无法接收返回值的解决方案

 
阅读更多

startActivityForResult调用其他Activity时候遭遇到onActivityResult方法不响应。

startActivityForResult无法接收返回值的解决方案。

 

原因可能有

# 不是单独的Activity而是一个子Activity,比如TabHost,ActivityGroup等

# 不能是singleTask

 

 

解决方案

# 根据需要去掉singleTask

#subActivity的解决方法如下文。

----摘----:

 

在TabHost的子Activity中startActivityForResult调用其他Activity时候遭遇到onActivityResult方法不响应的问题.

 

解决办法如下:

1.通过父Activity启动其他Activity;

2.实现父Activity的onActivityResult方法,将该处接收到的请求转发给当前活动的子Activity;

3.自定义一个转发接口用来实现第2步中的转发功能;

4.子Activity中实现第3步接口中的方法用来接收返回信息;

 

代码如下:

1.通过父Activity启动其他Activity

 

代码如下:

1.通过父Activity启动其他Activity

1 getParent().startActivityForResult(new Intent(...), REQUEST_CODE); 

2.实现父Activity的onActivityResult方法

复制代码
 1 @Override
 2     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 3         // 获取当前活动的Activity实例 4         Activity subActivity = getLocalActivityManager().getCurrentActivity();
 5         //判断是否实现返回值接口 6         if (subActivity instanceof OnTabActivityResultListener) {
 7             //获取返回值接口实例 8             OnTabActivityResultListener listener = (OnTabActivityResultListener) subActivity;
 9             //转发请求到子Activity10             listener.onTabActivityResult(requestCode, resultCode, data);
11         }
12         super.onActivityResult(requestCode, resultCode, data);
13     }
复制代码

3.自定义接口

复制代码
/**
 * 解决子Activity无法接收Activity回调的问题
 * @author Administrator
 *
 */
public interface OnTabActivityResultListener {
    public void onTabActivityResult(int requestCode, int resultCode, Intent data);
}
复制代码

4.子Activity需要实现onTabActivityResult方法

复制代码
@Override
    public void onTabActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
            //实现该处逻辑
        ...
        }
    }

转载:http://blog.csdn.net/simayilong/article/details/7596430
 

 

其他问题:

#getLocalActivityManager没有此方法

  getLocalActivityManager涉及LocalActivityManager,而这个类已经被deprecated了,参考这里官方文档。

This class was deprecated in API level 13.

Use the new Fragment and FragmentManager APIs instead; these are also available on older platforms through the Android compatibility package.  

 

#

 

 

+

+

+

=

=

=

 

分享到:
评论

相关推荐

    StartActivityForResult

    常见问题与解决方案 #### 4.1 请求码混淆 如果你有多个`StartActivityForResult`的调用,确保每个请求码是唯一的,否则可能无法正确识别返回结果。可以使用常量定义请求码,比如`REQUEST_CODE_IMAGE_SELECTION`、...

    startActivityForResult过时.md

    startActivityForResult过时.md

    startActivityForResult的详细用法

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

    Android带有返回值的finish(StartActivityForResult)

    标题"Android带有返回值的finish(StartActivityForResult)"所指的就是这个功能的实现。 `StartActivityForResult`的工作原理是这样的:当一个Activity(我们称之为A)启动另一个Activity(B)时,可以使用`...

    【android】的startActivityForResult

    在Android应用开发中,`startActivityForResult`是一个关键方法,用于在两个Activity之间进行交互,尤其是在需要从一个Activity启动另一个Activity并期待返回结果时。这个方法允许开发者在启动新的Activity时传递...

    startActivityForResult intent 跳转相关的

    在Android应用开发中,`startActivityForResult()`是一个关键方法,用于在不同的Activity之间进行交互,尤其是在需要从一个Activity获取返回结果时。这个方法允许我们启动一个新的Activity,并在它完成之后得到回调...

    startActivityForResult Demo

    在Android应用开发中,`startActivityForResult`是一个非常重要的方法,它允许我们启动一个新的Activity,并在新Activity执行完特定操作后返回结果。这篇博客“startActivityForResult Demo”可能详细介绍了如何使用...

    startActivityForResult你所不知道的---Fragment

    然后,`Fragment`会接收到`onActivityResult()`回调,我们可以在这里处理返回的数据: ```java @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == ...

    Android-一种startActivityForResult更简单流程

    在Android应用开发中,`startActivityForResult()`是一个关键方法,用于在不同的Activity之间进行通信,尤其是在需要从一个Activity返回结果到另一个Activity时。这个方法使得开发者可以启动一个新的Activity,并...

    案例八(启动带有返回值的activity

    `startActivityForResult()`方法是用来启动带有返回值的Activity的关键。第二个参数`REQUEST_CODE`是一个标识符,当我们从TargetActivity返回结果时,系统会使用这个代码来识别返回的数据来自哪个请求。 在被启动的...

    StartActivityForResult小例子

    这个过程涉及到两个主要的Activity:启动者(调用`startActivityForResult`的Activity)和被启动者(接收启动请求并可能返回结果的Activity)。下面将详细阐述`StartActivityForResult`的工作原理、使用步骤以及一些...

    Android之Intent通过startActivityForResult方法启动新Activity

    `startActivityForResult()`是Intent的一种特殊用法,它允许一个Activity启动另一个Activity,并期望在新Activity执行完特定操作后返回结果。下面将详细阐述`startActivityForResult()`的工作原理及其在实际开发中的...

    测试Activity的四种启动模式对startActivityForResult的影响

    这意味着,任何通过`startActivityForResult`启动的`Activity`都将被放入其他任务栈中,原`Activity`无法接收到返回结果。 了解了这些启动模式后,我们可以更有效地控制`Activity`间的通信。在使用`...

    startActivityForResult+onActivityResult+setResult

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

    startActivityForResult_demo

    三、`startActivityForResult`的替代方案:`Fragment`的`startActivityForResult`已在AndroidX库中弃用,推荐使用`startActivityForResult`的现代版——`registerForActivityResult`。这个新API使用Lambda表达式,...

    Android Intent带返回值跳转Demo

    5. 接收返回值 在原始Activity中,重写onActivityResult()方法,根据请求码判断哪个Activity返回了结果,然后从Intent中获取数据。 ```java @Override protected void onActivityResult(int requestCode, int ...

    简化 startActivityForResult 的使用1

    当 requestCode 比较多的时候,代码就会变得臃肿,并且逻辑被分离了,调用 startActivityForResult 的地方和接收结果的地方不在同一个位置,增加了代码的阅读难度。 为了解决这个问题,可以借鉴 Glide 使用 ...

    startActivityForResult使用方式

    在Android应用开发中,`startActivityForResult()`是一个关键的方法,用于在不同的Activity之间进行数据交互。这个方法允许一个Activity启动另一个Activity,并等待返回的结果。在本篇中,我们将深入探讨`...

    startActivityForResult用法详解

    在Android应用开发中,`startActivityForResult`是一个关键的方法,用于启动一个新的Activity并期待返回一个结果。这个方法常用于在不同Activity之间进行数据交互,比如获取用户的选择、处理权限请求等。在这个场景...

Global site tag (gtag.js) - Google Analytics