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.
#
+
+
+
=
=
=
相关推荐
常见问题与解决方案 #### 4.1 请求码混淆 如果你有多个`StartActivityForResult`的调用,确保每个请求码是唯一的,否则可能无法正确识别返回结果。可以使用常量定义请求码,比如`REQUEST_CODE_IMAGE_SELECTION`、...
startActivityForResult过时.md
在Android应用开发中,`startActivityForResult`是一个非常重要的方法,它允许我们在启动一个Activity时传递数据,并在那个Activity执行完后返回结果到调用它的Activity。这个过程涉及到Intent、生命周期管理和数据...
标题"Android带有返回值的finish(StartActivityForResult)"所指的就是这个功能的实现。 `StartActivityForResult`的工作原理是这样的:当一个Activity(我们称之为A)启动另一个Activity(B)时,可以使用`...
在Android应用开发中,`startActivityForResult`是一个关键方法,用于在两个Activity之间进行交互,尤其是在需要从一个Activity启动另一个Activity并期待返回结果时。这个方法允许开发者在启动新的Activity时传递...
在Android应用开发中,`startActivityForResult()`是一个关键方法,用于在不同的Activity之间进行交互,尤其是在需要从一个Activity获取返回结果时。这个方法允许我们启动一个新的Activity,并在它完成之后得到回调...
在Android应用开发中,`startActivityForResult`是一个非常重要的方法,它允许我们启动一个新的Activity,并在新Activity执行完特定操作后返回结果。这篇博客“startActivityForResult Demo”可能详细介绍了如何使用...
然后,`Fragment`会接收到`onActivityResult()`回调,我们可以在这里处理返回的数据: ```java @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == ...
在Android应用开发中,`startActivityForResult()`是一个关键方法,用于在不同的Activity之间进行通信,尤其是在需要从一个Activity返回结果到另一个Activity时。这个方法使得开发者可以启动一个新的Activity,并...
`startActivityForResult()`方法是用来启动带有返回值的Activity的关键。第二个参数`REQUEST_CODE`是一个标识符,当我们从TargetActivity返回结果时,系统会使用这个代码来识别返回的数据来自哪个请求。 在被启动的...
这个过程涉及到两个主要的Activity:启动者(调用`startActivityForResult`的Activity)和被启动者(接收启动请求并可能返回结果的Activity)。下面将详细阐述`StartActivityForResult`的工作原理、使用步骤以及一些...
`startActivityForResult()`是Intent的一种特殊用法,它允许一个Activity启动另一个Activity,并期望在新Activity执行完特定操作后返回结果。下面将详细阐述`startActivityForResult()`的工作原理及其在实际开发中的...
这意味着,任何通过`startActivityForResult`启动的`Activity`都将被放入其他任务栈中,原`Activity`无法接收到返回结果。 了解了这些启动模式后,我们可以更有效地控制`Activity`间的通信。在使用`...
3个方法的介绍和使用 startActivityForResult(Intent intent, int requestCode ) onActivityResult(int requestCode ,int resultCode, Intent data) setResult(int resultCode,intent intent)
三、`startActivityForResult`的替代方案:`Fragment`的`startActivityForResult`已在AndroidX库中弃用,推荐使用`startActivityForResult`的现代版——`registerForActivityResult`。这个新API使用Lambda表达式,...
5. 接收返回值 在原始Activity中,重写onActivityResult()方法,根据请求码判断哪个Activity返回了结果,然后从Intent中获取数据。 ```java @Override protected void onActivityResult(int requestCode, int ...
当 requestCode 比较多的时候,代码就会变得臃肿,并且逻辑被分离了,调用 startActivityForResult 的地方和接收结果的地方不在同一个位置,增加了代码的阅读难度。 为了解决这个问题,可以借鉴 Glide 使用 ...
在Android应用开发中,`startActivityForResult()`是一个关键的方法,用于在不同的Activity之间进行数据交互。这个方法允许一个Activity启动另一个Activity,并等待返回的结果。在本篇中,我们将深入探讨`...
在Android应用开发中,`startActivityForResult`是一个关键的方法,用于启动一个新的Activity并期待返回一个结果。这个方法常用于在不同Activity之间进行数据交互,比如获取用户的选择、处理权限请求等。在这个场景...