Android 几种startActivityForResult()的问题

转载 2016年06月02日 10:56:44

参考:1、http://blog.sina.com.cn/s/blog_5da93c8f0101gzf5.html


人人都知道,可以通过使用 startActivityForResult() 和 onActivityResult()方法来传递或接收参数。

但你是否遭遇过onActivityResult()不执行或者未按预想的那样执行的情况呢?

这里我总结了三种情况:

1、执行startActivityForResult,没等到被调用的 Activity返回,onActivityResult() 就被执行了。
找了很久,终于通过小道消息得知,这与 Activity 的加载模式(launchMode)有关,该属性可以在AndroidManifest.xml 中设置。
原先将其设为 singleInstance,经测试,所有需要传递或接收的 Activity不允许设置该属性,或只能设为标准模式,否则系统将在 startActivityForResult() 后直接调用onActivityResult()。

Note that this method should only be used with Intentprotocols
    * that are defined to return a result.  In otherprotocols (such as
    * {@link Intent#ACTION_MAIN} or{@link Intent#ACTION_VIEW}), youmay
    * not get the result when you expect. For example, if the activity you
    * are launching uses the singleTask launch mode, it will not run inyour
    * task and thus you will immediately receive a cancelresult.

 

2、两个activity传递数据和返回数据时,请求方的onActivityResult始终无响应,通过debug调试模式也没见调用该方法。查看了各种配置和程序代码,均未发现有错误之处。后来仔细阅读API说明,恍然大悟,原来是调用startActivityForResult的参数问题,即调用时这样:
startActivityForResult(intent, 0);
是第二个参数的问题,该参数必须大于0才能在返回值,并激活onActivityResult方法。
我最开始是用的一个activity默认的常量:RESULT_OK,跟踪了代码后发现,该常量的值为-1,当然没法激活onActivityResult方法了,随后随便修改为一个大于0的整数,程序即通跑成功。
startActivityForResult(intent, 1); //这样就行了

API描述:
@requestCode If >= 0, thiscode will be returned in  onActivityResult() whenthe activity exits.

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

可以通过调用Activity的getCallingActivity()查看要接受数据的Activity。

API这么解释的:

Return the name of the activity that invoked thisactivity.  This is
    * who the data in {@link #setResultsetResult()} will be sent to.

举个列子,有两个ActivityA和B,A中执行startActivityForResult(1,newIntent(A,B.class));

即由A调到B,再B执行setResult后执行getCallingActivity(),显示A。

总结:凡是Activity本身含有上次父类的情况都不能直接使用startActivityForResult,而要通过getParent(),通过父类调用此方法。
问题3转载于:http://www.cnblogs.com/relinson/archive/2012/03/25/startActivityForResult.html




Android------startActivityForResult的详细用法

在启动另外一个Activity的时候,有两种方法,一种是直接使用startActivity,另外一种就是使用startActivityForResult。前一种想必大家都明白怎么使用了,我就不废话了。...
  • sunchaoenter
  • sunchaoenter
  • 2011年07月17日 13:30
  • 147354

Android关于又返回的跳转 startActivityForResult()方法

虽然这是个很简单的事,但是有时候用的时候经常出点小问题,还是记下来吧! 先上主要代码: 1:MyActivity @Override     public void onClick(View ...
  • QQ55214
  • QQ55214
  • 2015年04月03日 17:33
  • 1631

startActivityForResult 无效问题

问题:两个Activity  A和B,从A跳到B,使用startActivityForResult,B结束后,A没有进入onActivityResult、 发现:launchMode导致。 B的l...
  • u011309801
  • u011309801
  • 2015年01月13日 11:52
  • 772

一种轻量级解决startActivityForResult启动Activity导致singleTop模式失效

Android中,如果要屏蔽用户手抖一下子点开两个相同的activity,可以将activity设置为singleTop模式或者singleTask模式,但是当activity的使用startActi...
  • ziqi_han
  • ziqi_han
  • 2016年04月04日 21:12
  • 1702

Android的startActivityForResult不起作用

之前startActivityForResult一直用的好好的,今天发现怎么也不起作用。检查后发现有两点影响了, 1、android:launchMode="singleTask",main里设成单...
  • tz2101
  • tz2101
  • 2014年11月11日 14:22
  • 1081

关于使用startActivityForResult() back 返回报空指针异常

有连个activity,一个为activityA 一个为activityB, 当在activityA使用startactivityforresult方法跳转到activityB中时,当当前界面是...
  • luobo_zhangweikang
  • luobo_zhangweikang
  • 2016年08月11日 11:05
  • 836

Android startActivityForResult基本用法

startActivityForResult和startActivity的区别是一个是带值传输,一个是直接跳转 具体用法如下: activity_main: ...
  • qq_32521313
  • qq_32521313
  • 2016年09月06日 16:46
  • 9186

activity中 调用startActivityForResult的步骤及生命周期

说明:一个activity需要另一个activity返回结果给其的时候,可以使用startActivityForResult方法 现在有两个activity,分别为ForResultActivity和...
  • u010962131
  • u010962131
  • 2015年08月03日 10:19
  • 3163

笔记19--startActivity、startActivityForResult、Bundle--更新传类对象、集合、类对象集合

1、startActivity:仅仅是跳转到目标页面,若想
  • mwj_88
  • mwj_88
  • 2014年04月11日 17:10
  • 2903

Android开发系列(十三):Intent实现Activity之间的转换以及startActivityForResult传递参数

Intent切换各个Activity以及startActivityForResult()方法来传递参数
  • u010800530
  • u010800530
  • 2014年09月23日 18:10
  • 4316
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 几种startActivityForResult()的问题
举报原因:
原因补充:

(最多只允许输入30个字)