Android的Fragment中onActivityResult不被调用的最终解决方案
来源:互联网 发布:windows10下载不了软件 编辑:程序博客网 时间:2024/06/16 18:16
摘自:http://www.myexception.cn/android/1908553.html
Fragment中的onActivityResult不被调用,有几种情况,请大家一一排查。
1.检查该Fragment所属的Activity中,是否重写了onActivityResult方法。
如果是该种情况,请确保写了super.onActivityResult:
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (resultCode == RESULT_OK) {//Activity中相关处理代码}}
2.检查Fragment中的startActivityForResult的调用方式。
请确保不要使用getActivity().startActivityForResult方法,而是要直接使用startActivityForResult。
3.如果以上两方面都没能解决问题,很可能是如下情况了,略有复杂:
该情况是在support library中使用了Nested Fragment,就是说在Fragment中进行了嵌套,比如用ViewPager展示Fragment等情况。这可以算Google的一个Bug,具体可参见这篇博客:
http://blog.shamanland.com/2014/01/nested-fragments-for-result.html
解决方案:
最好的方式是写一个BaseActivity继承FragmentActivity,重写onActivityResult方法,你用到的Activity都继承BaseActivity来做。BaseActivity具体实现:
package com.jupaidaren.android;import java.util.List;import android.content.Intent;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentManager;import android.util.Log;abstract public class BaseActivity extends FragmentActivity {private static final String TAG = "BaseActivity";@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {FragmentManager fm = getSupportFragmentManager();int index = requestCode >> 16;if (index != 0) {index--;if (fm.getFragments() == null || index < 0|| index >= fm.getFragments().size()) {Log.w(TAG, "Activity result fragment index out of range: 0x"+ Integer.toHexString(requestCode));return;}Fragment frag = fm.getFragments().get(index);if (frag == null) {Log.w(TAG, "Activity result no fragment exists for index: 0x"+ Integer.toHexString(requestCode));} else {handleResult(frag, requestCode, resultCode, data);}return;}}/** * 递归调用,对所有子Fragement生效 * * @param frag * @param requestCode * @param resultCode * @param data */private void handleResult(Fragment frag, int requestCode, int resultCode,Intent data) {frag.onActivityResult(requestCode & 0xffff, resultCode, data);List<Fragment> frags = frag.getChildFragmentManager().getFragments();if (frags != null) {for (Fragment f : frags) {if (f != null)handleResult(f, requestCode, resultCode, data);}}}}
0 0
- Android的Fragment中onActivityResult不被调用的最终解决方案
- Android中Fragment中onActivityResult不被调用的解决方案
- Android的Fragment中onActivityResult不被调用的解决方案
- Android的Fragment中onActivityResult不被调用的解决方案
- Android的Fragment中onActivityResult不被调用的解决方案
- Android的Fragment中onActivityResult不被调用解决方案
- Android的Fragment中onActivityResult不被调用的解决方案(绝对管用)
- Android的Fragment中onActivityResult不被调用的解决方案(绝对管用)
- Android的Fragment中onActivityResult不被调用的解决方案(绝对管用)
- Android的Fragment中onActivityResult不被调用的终极解决方案
- Android的Fragment中onActivityResult不被调用的解决方案(绝对管用)
- Android的Fragment中onActivityResult不被调用的终极解决方案
- Android中Fragment的onActivityResult不被调用的问题
- android中,fragment onActivityResult不被调用的问题?
- Android在Fragment中不调用onActivityResult()的解决办法
- Fragment中onActivityResult不调用的问题
- Android的onActivityResult不被调用的解决方案
- Android中OnActivityResult()不被Fragment调用的解决办法及源码分析
- 几句话实现导航栏透明渐变 – iOS
- 贩妖记 > 第四十九章,了断
- part2: maven 工程整合spring+activemq
- eclipse tomcat7 maven3 自动部署到tomcat
- 处理PXC初始化和启动报错三例
- Android的Fragment中onActivityResult不被调用的最终解决方案
- Muduo:EventLoop“循环”什么?
- vitamio官方demo源码分析1——MediaPlayerDemo_Video.java分析
- 过来人系列——五年软件开发的罪与罚
- 学习日记——Linux 2016.05.30
- 易语言 火眼 哈勃 防分析源码
- Android GridView 的使用
- 仿微信表情图片
- 1Roman to Integer 2 Integer to Roman 3 Integer to English Words转化问题