解决不走onActivityResult方法

最近在开发公司项目,在使用startActivityForResult关联俩个Activity中,发现A跳转到B,B设置setResult之后,A没有执行onActivityResult,查找一下,发现是A,B之前的启动模式都使用singleTask,查找下相关问题的解决办法。问题搞定了,下面也总结下之前自己遇到的其他情况。

总结下出现问题和解决办法:

    • 如果Activity 的加载启动模式(launchMode )是SingleTask或者
      ,会导致onActivityResult()没有调用。修改启动模式为singleTop或者标准。原因是:设置为
      launchmode=”SingleTask”,系统将在 startActivityForResult() 后直接调用
      onActivityResult()。
    • 两个activity传递数据和返回数据时,请求方的onActivityResult始终无响应,通过debug调试模式也没见调用该方法。查看了各种配置和程序代码,均未发现有错误之处。后来仔细阅读API说明,恍然大悟,原来是调用startActivityForResult的参数问题,即调用时这样:

      startActivityForResult(intent, 0);

      是第二个参数的问题,该参数必须大于0才能在返回值,并激活onActivityResult方法。

      API描述:

      @requestCode If >= 0, this code will be returned in onActivityResult() when the activity exits.

    • Fragment 的onActivityResult() 不执行。

      解决方法:处理方法是在与Fragment绑定的FragmentActivity中重写onActivityResult方法。返回的result先传至Fragment的FragmentActiivity。这个FragementActivity的onActivityResult函数必须调用super(requestCode,resultCode,
      data);
      。super.onActiivtyResult会将未被处理的result消息继续传给其fragement的onActiivtyResult。

      如果这种方法不管用用以下这种:解决方法就是在Fragment中直接调用startActivityForResult()方法,而不是调用 getActivity().startActivityForResult()。

时间: 2025-01-02 17:13:51

解决不走onActivityResult方法的相关文章

我的Android进阶之旅------>Android Activity的singleTask加载模式和onActivityResult方法之间的冲突

今天调试一个bug的时候,情景如下: 一个Activity A,需要用startActivityForResult方法开启Activity B.Activity B的launch mode被设置为singleTask,那么在Activity B开启之后的瞬间(未等B返回任何result),Activity A中的onActivityResult方法就会被调用,并且收到一个RESULT_CANCEL的request code. 然后在ActivityB中做了一些逻辑之后,在Activity B通过

Android的Activity的launchMode与onActivityResult方法的关系

Android的Activity有四种启动模式,分别是standard.singleTop.singleTask.singleInstance. 测试发现,不同的模式下onActivityResult的调用时机不同: 1 在standard.singleTop两个模式下,onActivityResult方法会在当前的Activity结束掉之后被调用 2 在singleTask.singleInstance两个模式下,onActivityResult方法会立即调用,等到再setResult的时候,

openSUSE13.1无法打开Yast的安装/移除软件管理软件的解决办法·(未解决,临时方法)

没有发现解决方案: 可用 sudo /sbin/yast2 用命令行的GUI替代...虽然差不多 决定一会update一下试试 openSUSE13.1无法打开Yast的安装/移除软件管理软件的解决办法·(未解决,临时方法),布布扣,bubuko.com

SQLServer查看和解决死锁的方法

在master数据库中新建以下存储过程 --处理死锁-- 查看当前进程,或死锁进程,并能自动杀掉死进程-- 因为是针对死的,所以如果有死锁进程,只能查看死锁进程-- 当然,你可以通过参数控制,不管有没有死锁,都只查看死锁进程--调用示例 exec p_lockinfo create proc [dbo].[p_lockinfo]@kill_lock_spid bit=1, --是否杀掉死锁的进程,1 杀掉, 0 仅显示@show_spid_if_nolock bit=1 --如果没有死锁的进程,

当在Fragment中使用startActivityForResult()方法打开一个Activity,但是这个Fragment的onActivityResult方法不执行

注意Fragment使用startActivityForResult()方法打开一个Activity,并需要这个Activity销毁时通过onActivityResult()传递数据给打开他的Fragment.一般是没有问题的,但是如果这个Fragment依附的那个FragmentActivity也重写了onActivityResult()方法,那么这个Fragment的onActivityResult()方法就获取不到数据了(被那个依附的FragmentActivity接受了),这时候我们只需

在Fragment中OnActivityResult方法中接收Activity中返回的值

在Fragment中OnActivityResult方法中接收Activity中返回的值 在Fragment中OnActivityResult方法中接收Activity中返回的值,有需要的朋友可以参考下. 在开发android中,有些人往往很疑惑,当一个FragmentActivity中有多个碎片的时候,如a,b,c三个碎片, 其中b中进行了操作,跳转到了新的界面D(activity).但是当D操作完后,返回值到碎片b.那么问题就来了,肯定会有人问,b是一个碎片,如何才能接收到D传过来的值呢?

【体系结构问题解决,1】解决4031错误方法

三.解决4031错误方法: (ora-4031错误产生原因:大量的硬解析后,导致链上的chunk都变的非常小,此时来了一个大的sql会找不到合适的chunk,就会报ora-4031错误.) 如果SHARED_POOL_SIZE 设置得足够大,又可以排除 Bug 的因素,那么大多数的ORA- 04031 错误都是由共享池中的大量的SQL 代码等导致过多内存碎片引起的. 1.执行alter system flush shared_pool; 清理library cache 和rows cache ,

[转]Android Activity的加载模式和onActivityResult方法之间的冲突

前言 今天在调试程序时,发现在某一Activity上点击返回键会调用该Activity的onActivityResult()方法.我一开始用log,后来用断点跟踪调试半天,还是百思不得其解.因为之前其他的Activity的LaunchMode都是Normal,没有特殊设定,这个Activity由于需求改成了singleTop.直到我确定没有一个地方是代码主动触发的,我才想到了跟Activity的LaunchMode是否有关. 探索 在Google上搜索android activity onact

【转】关于onActivityResult方法不执行的问题汇总

首先说说本人碰到的于onActivityResult不执行的情况.(网上找了很久都没有人碰到) 1.直接上代码说明 ActivityA的代码:(放在onCreate方法中) [java] view plaincopyprint? Intent intent = new Intent(ActivityA.this, ActivityB.class); Bundle bundle = new Bundle(); bundle.putString("abc", "aaaaaaaaa