Fragment中的onActivityResult不被调用,有几种情况,请大家一一排查。
1.检查该Fragment所属的Activity中,是否重写了onActivityResult方法。
如果是该种情况,请确保写了super.onActivityResult:
@Override protected 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"; @Override protected 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); } } } }
相关推荐
通过遵循这些解决方案,你应该能够有效地解决Fragment中的`onActivityResult`不调用问题。在实际开发中,还需要注意Android系统的版本差异以及兼容性问题,确保代码在不同设备和Android版本上都能正常工作。同时,...
常常会遇到一个问题:通过startActivityForResult启动Activity,然后希望在Fragment的onActivityResult中接收结果,但是只有最外层的Fragment能够接收到回调,而内嵌的Fragment则接收不到。这个问题困扰了许多开发者...
在Android开发中,`onActivityResult()` 是一个关键的方法,它用于处理从子Activity返回的结果。然而,当涉及到多个Fragment交互时,尤其是需要处理`startActivityForResult()` 的回调,`onActivityResult()` 往往会...
在Android应用开发中,`onActivityResult`和`onRequestPermissionsResult`是两个重要的回调方法,用于处理从其他Activity返回的结果和权限请求。然而,在大型项目或复杂应用中,管理这些请求码(requestCode)可能会...
值得注意的是,当从第二个Fragment返回第一个Fragment时,第一个Fragment只是从不可见变为可见,生命周期中的`onPause()`等方法并不会被调用。 然而,如果使用`replace()`方法,旧的Fragment会被完全移除,新的...
"Android在Fragment中实现监听触摸事件" Android在Fragment中实现监听触摸事件是指在Android应用程序中,如何在Fragment中监听触摸事件。Fragment是Android应用程序中的一个组件,它可以在Activity中使用,但是它并...
总结起来,Fragment回调接口是Android应用开发中不可或缺的一部分,它使Fragment和Activity以及Fragment之间的通信变得简单和有序。熟练掌握这些回调方法以及数据传递方式,对于编写健壮且灵活的Android应用程序至关...
在Android应用开发中,Fragment是UI组件的一种,它允许我们构建可重用的模块化界面。Fragment可以在Activity中动态添加、删除或替换,这在设计适应不同屏幕尺寸和配置的应用时非常有用。当我们想要增强用户体验,使...
在Fragment中实现了调用dateDialog控件选取日期,并将日期显示出来
在Android应用开发中,Activity和Fragment是两个核心组件。Activity作为应用程序的主要入口点,而Fragment则作为可重用的UI块,可以在多个Activity之间切换或组合。然而,在使用Fragment时,有时会出现一个问题:当...
在Android应用开发中,Fragment是UI组件的一种,用于在大屏幕设备上实现多屏或复合视图。Fragment可以在Activity之间动态地添加、移除或替换,使得应用在不同屏幕尺寸和配置下都能提供良好的用户体验。"Android ...
Fragment不能独立存在,它必须嵌入到Activity中,因此 Fragment的生命周期也依赖于Activity的生命周期,当其依赖的Activity的某个生命周期方法被调用时,该Activity下包含的所有Fragment的相应生命周期方法也将被...
在Android开发中,`FragmentPagerAdapter`是用于管理`ViewPager`中的`Fragment`序列的一个关键组件。然而,有时候开发者可能会遇到一个问题:当尝试调用`FragmentPagerAdapter`的`notifyDataSetChanged()`方法来更新...
为解决这个问题,需要在Activity A的onActivityResult方法中调用`super.onActivityResult(requestCode, resultCode, data)`,这样可以确保子Fragment的onActivityResult也能正常工作。 ```java @Override ...
Android Fragment是Android应用程序开发中的一个核心组件,它在Android 3.0(API级别11)版本被引入,主要用于创建动态且模块化的用户界面。Fragment的设计理念是为了更好地适应多屏幕设备,使得开发者能够将UI的...
在Android应用开发中,Fragment是Android SDK提供的一种组件,它允许开发者在Activity中创建可重用的UI块。Fragment的设计使得应用程序能更好地适应不同屏幕尺寸和配置,如手机和平板。"Android Fragment的简单使用...
在Android应用开发中,Fragment是Android SDK提供的一种组件,它允许开发者在单个Activity中实现多个可交互的屏幕区域。Fragment的设计使得应用可以更好地适应不同的屏幕尺寸和配置,如手机和平板。本教程将深入讲解...
在Android应用开发中,Fragment是Android SDK中的一个重要组件,它被设计用来支持多屏幕适配和增强用户界面的模块化。Fragment允许开发者将应用程序的功能或UI部分分解为独立的、可重用的组件,这些组件可以在不同的...
在项目中需要进行Fragment的切换,一直都是用replace()方法来替换Fragment 但是,这样会有一个问题 ,应该很多朋友都遇到过: 每次切换的时候,Fragment都会重新实例化,也就是运行OnCreatVIew()方法 那么如何让多个...