fragment中startActivityForResult的一些问题
来源:互联网 发布:淘宝网上买狗怎么寄来 编辑:程序博客网 时间:2024/05/22 03:48
Case 2:当我们从一个Activity启动了一个Fragment,然后在这个Fragment中又去实例化了一些子Fragment,在子Fragment中去有返回的启动了另外一个Activity,即通过startActivityForResult方式去启动,这时候造成的现象会是,子Fragment接收不到OnActivityResult,如果在子Fragment中是以getActivity.startActivityForResult方式启动,那么只有Activity会接收到OnActivityResult,如果是以getParentFragment.startActivityForResult方式启动,那么只有父Fragment能接收(此时Activity也能接收),但无论如何子Fragment接收不到OnActivityResult。
这是一个非常奇怪的现象,按理说,应该是让子Fragment接收到OnActivityResult才对,究竟是什么造成的呢?这是由于某位写代码的员工抱怨没发奖金,稍稍偷懒了,少写了一部分代码,没有考虑到Fragment再去嵌套Fragment的情况。
我们来看看FragmentActivity中的代码:
protected void onActivityResult(int requestCode, int resultCode, Intent data) { this.mFragments.noteStateNotSaved(); int index = requestCode >> 16; if (index != 0) { index--; if ((this.mFragments.mActive == null) || (index < 0) || (index >= this.mFragments.mActive.size())) { Log.w("FragmentActivity", "Activity result fragment index out of range: 0x" + Integer.toHexString(requestCode)); return; } Fragment frag = (Fragment)this.mFragments.mActive.get(index); if (frag == null) { Log.w("FragmentActivity", "Activity result no fragment exists for index: 0x" + Integer.toHexString(requestCode)); } else { frag.onActivityResult(requestCode & 0xFFFF, resultCode, data); } return; } super.onActivityResult(requestCode, resultCode, data); }
很显然,设计者把Fragment的下标+1左移16位来标记这个request是不是Fragment的,拿到result再解码出下标,直接取对应的Fragment,这样并没有去考虑对Fragment嵌套Fragment做一个Map映射,所以出现了这种BUG。
但是如果我们需要在OnActivityResult的时候处理一些事情的话,我们可以通过在子Fragment中以getParentFragment.startActivityForResult的方式来启动,然后在父Fragment中去接收数据,我们需要在子Fragment中提供一个方法,如:getResultData(Object obj),通过父Fragment中的子Fragment实例去调用这个方法,把相应的数据传过去,然后去更新子Fragment。
以上是在使用Fragment去嵌套Fragment的时候可能会遇到的BUG,了解了BUG存在的原因之后,就可以完美的解决问题。
- fragment中startActivityForResult的一些问题
- Fragment中调用startActivityForResult问题
- 在Fragment中使用StartActivityForResult,RequestCode错乱的问题
- Fragment中StartActivityForResult以及EventBus的使用问题
- Fragment中startActivityForResult不回调onActivityResult问题
- startActivityForResult用法详解&&Fragment中startActivityForResult的用法
- 浅析Fragment中startActivityForResult()与getActivity().startActivityForResult()的异同
- fragment调用startActivityforResult的回调问题
- Fragment Activity 中startActivityForResult的回调
- Fragment Activity 中startActivityForResult的回调
- fragment 调用startActivityForResult 问题
- Fragment调用startActivityForResult问题
- Fragment中使用 startActivityForResult
- Fragment中使用startActivityForResult
- Fragment中使用startActivityForResult
- 解决Android中Fragment调用startactivityforresult不能返回结果的问题
- Fragment中startActivityForResult调转Activity时onActivityResult先执行等问题的解决方法
- Fragment的startActivityForResult方法
- Java_基础大全1
- PHP 5.2 5.3 5.5 5.4 5.6 对比以及功能详解
- SpringMVC那些事-整体概述
- 利用ubuntu配置linux下c语言开发环境
- 看书读书,必须少而精
- fragment中startActivityForResult的一些问题
- Java入门_数组
- CentOS 使用第三方yum源安装更多rpm软件包
- 黑马程序员-----java基础语法 函数数组
- iOS规范及语法
- Java入门_String类
- XML解析
- Java入门_面向对象基本概念
- Java入门_内部类