总结:调用startActivityForResult,onActivityResult无响应的问题
人人都知道,可以通过使用 startActivityForResult() 和 onActivityResult() 方法来传递或接收参数。
但你是否遭遇过onActivityResult()不执行或者未按预想的那样执行的情况呢?
这里我总结了三种情况:
1、执行startActivityForResult,没等到被调用的 Activity 返回,onActivityResult() 就被执行了。
找了很久,终于通过小道消息得知,这与 Activity 的加载模式(launchMode)有关,该属性可以在
AndroidManifest.xml 中设置。
原先将其设为 singleInstance,经测试,所有需要传递或接收的 Activity
不允许设置该属性,或只能设为标准模式,否则系统将在 startActivityForResult() 后直接调用
onActivityResult()。
Note that this method should only be used with Intent
protocols
* that are defined to return a result. In other
protocols (such as
* {@link Intent#ACTION_MAIN} or
{@link Intent#ACTION_VIEW}), you
may
* not get the result when you expect.
For example, if the activity you
* are launching uses the singleTask launch mode, it will not run in
your
* task and thus you will immediately receive a cancel
result.
2、两个activity传递数据和返回数据时,请求方的onActivityResult始终无响应,通过debug调试模式也没见调用该方法。查看了
各种配置和程序代码,均未发现有错误之处。后来仔细阅读API说明,恍然大悟,原来是调用startActivityForResult的参数问题,即调
用时这样:
startActivityForResult(intent, 0);
是第二个参数的问题,该参数必须大于0才能在返回值,并激活onActivityResult方法。
我最开始是用的一个activity默认的常量:RESULT_OK,跟踪了代码后发现,该常量的值为-1,当然没法激活
onActivityResult方法了,随后随便修改为一个大于0的整数,程序即通跑成功。
startActivityForResult(intent, 1); //这样就行了
API描述:
@requestCode If >= 0, this
code will be returned in onActivityResult() when
the activity exits.
3、在TabHost的子Activity中startActivityForResult调用其他Activity时候遭遇到onActivityResult方法不响应的问题.
可以通过调用Activity的getCallingActivity()查看要接受数据的Activity。
API这么解释的:
Return the name of the activity that invoked this
activity. This is
* who the data in {@link #setResult
setResult()} will be sent to.
举个列子,有两个ActivityA和B,A中执行startActivityForResult(1,new
Intent(A,B.class));
即由A调到B,再B执行setResult后执行getCallingActivity(),显示A。
解决办法如下:
1.通过父Activity启动其他Activity;
2.实现父Activity的onActivityResult方法,将该处接收到的请求转发给当前活动的子Activity;
3.自定义一个转发接口用来实现第2步中的转发功能;
4.子Activity中实现第3步接口中的方法用来接收返回信息;
代码如下:
1.通过父Activity启动其他Activity
1 getParent().startActivityForResult(new Intent(...), REQUEST_CODE);
2.实现父Activity的onActivityResult方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// 获取当前活动的Activity实例
Activity subActivity = getLocalActivityManager().getCurrentActivity();
//判断是否实现返回值接口
if (subActivity instanceof OnTabActivityResultListe<wbr>ner) {
//获取返回值接口实例
OnTabActivityResultListe<wbr>ner listener = (OnTabActivityResultListe<wbr>ner) subActivity;
//转发请求到子Activity
listener.onTabActivityResult(requestCode, resultCode, data);
}
super.onActivityResult(requestCode, resultCode, data);
}
3.自定义接口

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://www.cnblogs.com/relinson/archive/2012/03/25/startActivityForResult.html
总结:调用startActivityForResult,onActivityResult无响应的问题的更多相关文章
- 调用startActivityForResult,onActivityResult无响应的解决办法
三种情况: 1.执行startActivityForResult,没等到被调用的 Activity 返回,onActivityResult() 就被执行了.找了很久,终于通过小道消息得知,这与 Act ...
- 调用startActivityForResult后直接调用onActivityResult
人员都知道,可以经由过程应用 startActivityForResult() 和 onActivityResult() 办法来传递或接管参数. 然而在"轻听"项目中,还没比及被调 ...
- 调用startActivityForResult后,onActivityResult为什么立刻响应
现象 今天在编写代码的时候,涉及到两个Activity通过Intent来传值的问题.具体描述为:activity A调用startActivityForResult()函数启动Activit ...
- 循环调用spring的dao,数个过后无响应
循环调用spring的dao,数个过后无响应 博客分类: spring daospringssh 最近遇到这么一个问题:前台按钮发送AJax请求到后台,后台是SSH框架.每点击一下按钮就发送 ...
- Fragment中onActivityResult不响应
开发中遇到Fragment中onActivityResult不响应的问题,曾经见过. 不少同学说处理方法是在与Fragment绑定的FragmentActivity中重写onActivityResul ...
- 分析案例:应用服务无响应,任务管理器中发现大量w3wp僵尸进程----等待异构系统WebService返回值
问题描述: 某二次开发的项目反馈,不定期出现应用服务器无响应的情况,登录服务器发现任务管理器中有大量的w3wp僵尸进程. 分析过程: 针对同一进程每隔15秒抓取dump,连续抓取3个,对比 ...
- android小知识之fragment中调用startActivityForResult(Intent intent,int requestcode)所遇到的问题
大家都知道对于Activity和Fragment都可以注册OnActivityResult()方法,但是要注意几点: a.当activity和fragment都注册了OnActivityResult( ...
- 转 -android:程序无响应,你该如何定位问题?
如果MainThread长时间无响应,系统会提示“XXX无响应”,然后用户会关闭.那么,如何定位问题呢?无响应并不像Crash,它抓取不到异常日志,通常我们需要调试,才能定位问题.如何调试呢? 1.在 ...
- Android ANR(应用无响应)解决分析【转】
本文转载自:https://blog.csdn.net/u014630142/article/details/81709459 来自: http://blog.csdn.net/tjy1985/art ...
随机推荐
- Windows系统中IIS 6.0+Tomcat服务器环境的整合配置过程
IIS6.0+Tomcat整合 1.首先准备工作 Windows IIS 6.0 apache-tomcat-7.0.26.exe tomcat-connectors-1.2.33-windows-i ...
- [编译] g++ 与 Makefile
g++ -c CppSoureFile -o ObjectCodeFile -c 编译而不链接 -lm 链接数学库 -static 生成静态链接的程序
- Xcode 不提示, 引用失效等情况
在编写xcode的项目的时候出现过代码不高亮的症状,而且所有的warning都不再提示,include的内容也显示symbol not found,非常奇怪,解决方案如下: 方法一: 1.把.pch里 ...
- c# process 输入输出
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 数组MARSHALLING z
在托管代码和本地代码之间传递数组,是interop marshaling中间比较复杂的一个问题.本文从数组的定义开始,介绍数组marshalling的三种方法,并对blittable类型等概念做进一步 ...
- Flash Builder4.6破解方案(亲测有效)(转)
转自 http://bbs.9ria.com/thread-139463-1-1.html 当修改Host文件无法破解时,需要修改Flash Builder安装目录下某些文件来达到破解的目的,经网上搜 ...
- Specular light 计算
Specular lighting is most commonly used to give light reflection off of metallic surfaces such as mi ...
- 《Genesis-3D开源游戏引擎--横版格斗游戏制作教程01: 资源导入》
1. 资源导入 概述: 制作一款游戏需要用到很多资源,比如:模型.纹理.声音和脚本等.通常都是用其它相关制作资源软件,完成前期资源的收集工作.比如通常用的三维美术资源,会在Max.MAYA等相应软件中 ...
- Hadoop框架下MapReduce中的map个数如何控制
控制map个数的核心源码 long minSize = Math.max(getFormatMinSplitSize(), getMinSplitSize(job)); //getFormatMinS ...
- 获取所有组合算法、获取全排列算法(java)
转载声明:原文转自:http://www.cnblogs.com/xiezie/p/5574516.html 受到ACM1015的影响,个人感觉,有必要对统计学上的 全组合和全排列 进行一个简单的总结 ...