片段中未调用 onActivityResult
Posted
技术标签:
【中文标题】片段中未调用 onActivityResult【英文标题】:onActivityResult is not being called in Fragment 【发布时间】:2011-09-03 02:56:56 【问题描述】:当相机 Activity 返回时,承载此片段的 Activity 会调用其 onActivityResult
。
我的片段启动了一个结果活动,目的是发送给相机拍照。图片应用程序加载正常,拍照并返回。但是,onActivityResult
永远不会被击中。我设置了断点,但没有触发任何东西。片段可以有onActivityResult
吗?我会这么认为,因为它是一个提供的功能。为什么没有触发?
ImageView myImage = (ImageView)inflatedView.findViewById(R.id.image);
myImage.setOnClickListener(new OnClickListener()
@Override
public void onClick(View view)
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, 1888);
);
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
if( requestCode == 1888 )
Bitmap photo = (Bitmap) data.getExtras().get("data");
((ImageView)inflatedView.findViewById(R.id.image)).setImageBitmap(photo);
【问题讨论】:
查看这个帖子,有问题描述和常见的解决方法:***.com/questions/6147884/… 其他阅读本文的人请确保您通过requestCode >= 0
!
还要确保你的 Activity LauchMode 不能是 singleInstance 或 singleTask。否则 onActivityResult 将不会被调用
看到这个链接可能对你有帮助:androidtutorialonline.com/onactivityresult-in-fragment
我们需要将Activity中的onActivityResult重定向到Fragment。参考这个链接:codexpedia.com/android/…
【参考方案1】:
onActivityResult 现在已弃用。您可以使用以下代码:
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) result->
// here you can handle result, result.data and result.resultCode
开始活动
val intent = Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE)
launcher.launch(intent)
【讨论】:
【参考方案2】:如果您不知道活动中的片段,只需枚举它们并发送活动结果参数:
//Java
// In your activity
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
for (Fragment fragment : getSupportFragmentManager().getFragments())
fragment.onActivityResult(requestCode, resultCode, data);
//科特林
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?)
super.onActivityResult(requestCode, resultCode, data)
for (fragment in supportFragmentManager.fragments)
fragment.onActivityResult(requestCode, resultCode, data)
【讨论】:
该死,我以为我只是找到了最简单的解决方案,但是没有 getFragments() 这样的方法。 @WindRider 有。如果您使用 Android 支持库 (AppCompat)。 另外,我学到了一个艰难的方法,你必须检查数组中的片段是否不是对自身的引用! ` if(fragment!=this) fragment.onActivityResult(requestCode, resultCode, data); ` 如果片段是嵌套的,这不起作用,因为只有顶部片段会在列表中。我相信 super.onActivityResult() 已经在列表中的所有片段上调用 onActivityResult() 了,所以这个想法是多余的。 这就像魅力男,你拯救了我的一天。非常感谢你的朋友。【参考方案3】:添加这个
public void onClick(View v)
Intent intent = new Intent(Intent.ACTION_GET_CONTENT,MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, 1);
当你用上面的代码替换你的代码时,自动你的这个
public void onActivityResult(int requestCode, int resultCode,
@Nullable Intent data)
方法将开始工作
//No Need to write this code in onclick method
Intent intent=new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT)
startActivityForResult(intent,1);
Toast.makeText(getContext(), "image"+intent, Toast.LENGTH_SHORT).show();
【讨论】:
【参考方案4】:就我而言,在开发者选项中我打开了“不保留活动”,这导致了这个问题。
万一它对某人有帮助。
【讨论】:
【参考方案5】:Kotlin 版本适用于那些使用受 Mohit Mehta 回答启发的 Android 导航组件的人
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?)
super.onActivityResult(requestCode, resultCode, data)
supportFragmentManager.primaryNavigationFragment?.childFragmentManager?.fragments?.forEach fragment ->
fragment.onActivityResult(requestCode, resultCode, data)
【讨论】:
这是正确的代码覆盖 fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) super.onActivityResult(requestCode, resultCode, data) activity?.supportFragmentManager?.primaryNavigationFragment?. childFragmentManager?.fragments?.forEach fragment -> fragment.onActivityResult(requestCode, resultCode, data) 为 Kotlin 导航组件工作 我应该在 forEach 范围内还是在 forEach 范围之后的主范围内编写代码(例如 if(resultCode != Result_ok))? 它解决了我的问题,导航图片段 onActivityResult 。做得好【参考方案6】:使用 Android 的导航组件,这个问题,当您嵌套了 Fragments 时,感觉就像一个无法解开的谜。
根据本文中以下答案的知识和灵感,我设法制定了一个有效的简单解决方案:
Answer in this post Answer in this post在您的活动的onActivityResult()
中,您可以循环通过使用FragmentManager
的getFragments()
方法获得的活动片段列表。
请注意,要执行此操作,您需要使用getSupportFragmentManager()
或针对 API 26 及更高版本。
这里的想法是循环检查列表中每个片段的实例类型,使用instanceof
。
虽然循环遍历这个Fragment
类型的列表是理想的,但不幸的是,当您使用Android 导航组件时,该列表将只有一项,即NavHostFragment
。
那么现在呢?我们需要让NavHostFragment
知道片段。 NavHostFragment
本身就是一个片段。因此,使用getChildFragmentManager().getFragments()
,我们再次获得NavHostFragment
已知的片段的List<Fragment>
。我们遍历该列表,检查每个 Fragment 的 instanceof
。
一旦我们在列表中找到感兴趣的 Fragment,我们将其称为 onActivityResult()
,并将 Activity 的 onActivityResult()
声明的所有参数传递给它。
// Your activity's onActivityResult()
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data)
super.onActivityResult(requestCode, resultCode, data);
List<Fragment> lsActiveFragments = getSupportFragmentManager().getFragments();
for (Fragment fragmentActive : lsActiveFragments)
if (fragmentActive instanceof NavHostFragment)
List<Fragment> lsActiveSubFragments = fragmentActive.getChildFragmentManager().getFragments();
for (Fragment fragmentActiveSub : lsActiveSubFragments)
if (fragmentActiveSub instanceof FragWeAreInterestedIn)
fragmentActiveSub.onActivityResult(requestCode, resultCode, data);
【讨论】:
【参考方案7】:对于那些使用Android Navigation Component的人应该在Activity的onActivityResult(...)
中使用primaryNavigationFragment
来获取它的片段引用并调用片段的fragment.onActivityResult(...)
。
这是活动的onActivityResult(...)
@Override
public void onActivityResult(int requestCode, int resultCode, Intent imageData)
super.onActivityResult(requestCode, resultCode, imageData);
for (Fragment fragment : getSupportFragmentManager().getPrimaryNavigationFragment().getChildFragmentManager().getFragments())
fragment.onActivityResult(requestCode, resultCode, imageData);
【讨论】:
【参考方案8】:首先你需要在Activity中重写这段代码;
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data)
super.onActivityResult(requestCode, resultCode, data);
之后,在您的片段中,
startActivityForResult(intent,GALLERY_REQUEST_CODE);
再一次比在你的片段中,
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data)
super.onActivityResult(requestCode, resultCode, data);
// Result code is RESULT_OK only if the user selects an Image
if (resultCode == Activity.RESULT_OK)
【讨论】:
【参考方案9】:Kotlin 版本(在您的活动 onActivityResult())
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?)
//add following lines in your activity
if(supportFragmentManager?.fragments!=null && supportFragmentManager?.fragments!!.size>0)
for (i in 0..supportFragmentManager?.fragments!!.size-1)
val fragment= supportFragmentManager?.fragments!!.get(i)
fragment.onActivityResult(requestCode, resultCode, data)
【讨论】:
【参考方案10】:其他答案中尚未描述的另一个用例:
片段中声明的onActivityResult()
在使用exception.startResolutionForResult()
时不会被调用:
if (exception is ResolvableApiException)
exception.startResolutionForResult(activity!!, MY_REQUEST_CODE)
在这种情况下,将exception.startResolutionForResult()
替换为片段的startIntentSenderForResult()
:
if (exception is ResolvableApiException)
startIntentSenderForResult(exception.resolution.intentSender, MY_REQUEST_CODE, null, 0, 0, 0, null)
【讨论】:
【参考方案11】:当我将这段代码从 Fragment 转移到 Utility Class 时,我也遇到了同样的问题,parentActivity
作为参数传递,
Intent intent = new Intent(parentActivity, CameraCaptureActivity.class);
parentActivity.startActivityForResult(intent,requestCode);
然后我在那个 Fragment 的 onActivityResult
方法中没有得到任何价值,
之后,我把 argument 改成了 Fragment,所以修改后的方法定义看起来像,
Intent intent = new Intent(fragment.getContext(), CameraCaptureActivity.class);
fragment.startActivityForResult(intent,requestCode);
在那之后,我能够在 Fragment
上获得onActivityResult
的价值
【讨论】:
【参考方案12】:选项 1:
如果你从片段调用startActivityForResult()
,那么你应该调用startActivityForResult()
,而不是getActivity().startActivityForResult()
,因为它会导致片段onActivityResult()。
如果你不确定你在哪里调用 startActivityForResult()
以及你将如何调用方法。
选项 2:
由于 Activity 获得 onActivityResult()
的结果,您需要覆盖 Activity 的 onActivityResult()
并调用 super.onActivityResult()
以传播到相应的片段以获取未处理的结果代码或全部。
如果以上两个选项都不起作用,那么请参考选项3,因为它肯定会起作用。
选项 3:
fragment 对 onActivityResult 函数的显式调用如下。
在父Activity类中,重写onActivityResult()方法,甚至在Fragment类中重写,调用如下代码。
在父类中:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.dualPane);
fragment.onActivityResult(requestCode, resultCode, data);
在子类中:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
// In fragment class callback
【讨论】:
这对我有用。这是一个令人讨厌的解决方法,但我没有更好的主意来解决这个愚蠢的错误...... @Vivky,您的回答对我有用。但是我还面临一个问题,而不是setResult(); finish();
,当我从第二个活动中按下时,onActivityResult
也被提供的RESULT_CODE
调用。
绝妙的答案。我实施了第三个解决方案来完成它。
我认为解决方案 3 对我有用,但活动的 onActivityResult()
返回一个奇怪的 requestCode
,它被传递给我的片段,然后被忽略 =/
@notGeek 你是对的。即使您从片段或活动中调用,结果也始终在活动中接收。【参考方案13】:
托管活动覆盖onActivityResult()
,但它没有调用super.onActivityResult()
以获取未处理的结果代码。显然,即使片段是发出startActivityForResult()
调用的片段,该活动也会首先处理结果。当您考虑片段的模块化时,这是有道理的。一旦我为所有未处理的结果实现了super.onActivityResult()
,片段就可以处理结果。
还有来自@siqing 的回答:
要在片段中获取结果,请确保在片段中调用 startActivityForResult(intent,111);
而不是 getActivity().startActivityForResult(intent,111);
。
【讨论】:
在你activity的onActivityResult中,调用super.onActivityResult() @StErMi 确保从片段中调用 startActivityForResult() 而不是 getActivity().startActivityForResult()。请参阅下面的四清答案。 似乎有一个相关的错误,正在使用支持库code.google.com/p/android/issues/detail?id=15394 另外请注意,如果您使用嵌套片段,则子片段应调用getParentFragment().startActivityForResult
,以便父片段将调用其 onActivityResult 方法。
@EricBrynsvold 是对的,startActivityForResult 在嵌套片段中不起作用。为此,您最好调用getParentFragment().startActivityForResult(),然后在该父片段中实现onActivityResult(),并在该方法中将结果传递给子片段,即:childFragment.getParentFragment()。 onActivityResult(requestCode, resultCode, data)【参考方案14】:
ChildFragmentManager
也有同样的问题。管理器不会将结果传递给嵌套片段,您必须在基本片段中手动执行此操作。
public void onActivityResult(int requestCode, int resultCode, Intent intent)
super.onActivityResult(requestCode, resultCode, intent);
Fragment fragment = (Fragment) getChildFragmentManager().findFragmentByTag(childTag);
if (fragment != null)
fragment.onActivityResult(requestCode, resultCode, intent);
【讨论】:
如果你有你的子 Fragment 作为私有成员,那么使用Fragment fragment = myChildFragment;
替换上面的findFragmentByTag
代码行。其余的可以保持不变。
我想我强烈建议不要将片段保留为私有成员。他们有自己的生命周期,所以你永远不知道他们是否处于良好的互动状态,经理知道。它们也很重,我会担心内存泄漏。如果您不需要使用管理器,就不会创建它。【参考方案15】:
就我而言,这是一个 Android 错误 (http://technet.weblineindia.com/mobile/onactivityresult-not-getting-called-in-nested-fragments-android/),如果您使用受支持的 FragmentActivity
,则必须使用 getSupportFragmentManager
而不是 getChildFragmentManager
:
List<Fragment> fragments = getSupportFragmentManager().getFragments();
if (fragments != null)
for (Fragment fragment : fragments)
if(fragment instanceof UserProfileFragment)
fragment.onActivityResult(requestCode, resultCode, data);
【讨论】:
【参考方案16】:如果您使用嵌套片段,这也可以:
getParentFragment().startActivityForResult(intent, RequestCode);
除此之外,您还必须从父活动中调用super.onActivityResult
并填充片段的onActivityResult
方法。
【讨论】:
【参考方案17】:如果片段类中的方法onActivityResult
有问题,并且您想更新片段类中的某些内容,请使用:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
if(resultCode == Activity.RESULT_OK)
// If the user had agreed to enabling Bluetooth,
// populate the ListView with all the paired devices.
this.arrayDevice = new ArrayAdapter<String>(this.getContext(), R.layout.device_item);
for(BluetoothDevice bd : this.btService.btAdapater.getBondedDevices())
this.arrayDevice.add(bd.getAddress());
this.btDeviceList.setAdapter(this.arrayDevice);
super.onActivityResult(requestCode, resultCode, data);
只需添加this.variable
,如上面的代码所示。否则,该方法将在父活动中被调用,并且不会更新当前实例的变量。
我还通过将此代码块放入MainActivity
中进行了测试,将this
替换为HomeFragment
类,并将变量设为静态。我得到了预期的结果。
所以如果你想让片段类有自己的onActivityResult
实现,上面的代码示例就是答案。
【讨论】:
【参考方案18】:这是最受欢迎的问题之一。我们可以找到很多关于这个问题的线程。但它们都对我没有用。
所以我已经使用这个解决方案解决了这个问题。
让我们首先了解为什么会发生这种情况。
我们可以直接从 Fragment 调用startActivityForResult
但实际上背后的机制都是由 Activity 处理的。
一旦您从 Fragment 调用 startActivityForResult
,requestCode 将被更改以将 Fragment 的身份附加到代码中。这将使 Activity 能够在收到结果后追踪发送此请求的人。
一旦 Activity 被导航回来,结果将被发送到 Activity 的 onActivityResult 以及修改后的 requestCode 将被解码为原始 requestCode + Fragment 的标识。之后,Activity 会通过 onActivityResult 将 Activity Result 发送到该 Fragment。一切都完成了。
问题是:
Activity 只能将结果发送到直接附加到 Activity 的 Fragment,但不能发送到嵌套的 Fragment。这就是为什么嵌套片段的onActivityResult无论如何都不会被调用的原因。
解决方案:
1) 通过以下代码在 Fragment 中启动 Intent:
/** Pass your fragment reference **/
frag.startActivityForResult(intent, REQUEST_CODE); // REQUEST_CODE = 12345
2) 现在在您的 Parent Activity 中覆盖 **onActivityResult()
:**
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
您必须在父活动中调用它才能使其工作。
3) 在您的片段调用中:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK)
就是这样。 使用此解决方案,它可以应用于任何单个片段,无论它是否嵌套。是的,它也涵盖了所有情况!此外,代码也很干净。
【讨论】:
我用“活动”请求系统意图,我只需要使用片段上下文。 这应该是公认的解决方案,它解释了发生的事情,而不仅仅是婴儿喂食代码【参考方案19】:没有人有
mention
确保您的主机活动启动模式不得设置为singleInstance
或singleTask
。
如果您的启动模式设置为 SingleInstance 或 SingleTask,onActivityResult 将不起作用。或者您使用这些 IntentFilters 调用您的活动
standard
或 singleTop
启动模式可以正常工作。
【讨论】:
【参考方案20】:我的问题出在 Host 活动上,我用一组 android:launchMode="standard"
找到了它,我暂时删除了它并且它可以工作!
【讨论】:
【参考方案21】:您的代码有一个嵌套片段。调用 super.onActivityForResult 不起作用
您不想修改可以从中调用您的片段的每个活动,或者围绕调用片段链中的每个片段进行工作。
这是许多可行的解决方案之一。动态创建一个片段并使用支持片段管理器将其直接连接到活动。然后从新创建的片段中调用 startActivityForResult。
private void get_UserEmail()
if (view == null)
return;
((TextView) view.findViewById(R.id.tvApplicationUserName))
.setText("Searching device for user accounts...");
final FragmentManager fragManager = getActivity().getSupportFragmentManager();
Fragment f = new Fragment()
@Override
public void onAttach(Activity activity)
super.onAttach(activity);
startActivityForResult(AccountPicker.newChooseAccountIntent(null, null,
new String[]"com.google", false, null, null, null, null), REQUEST_CODE_PICK_ACCOUNT);
@Override
public void onActivityResult(int requestCode, int resultCode,
Intent data)
if (requestCode == REQUEST_CODE_PICK_ACCOUNT)
String mEmail = "";
if (resultCode == Activity.RESULT_OK)
if (data.hasExtra(AccountManager.KEY_ACCOUNT_NAME))
mEmail = data
.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
if (mActivity != null)
GoPreferences.putString(mActivity, SettingApplication.USER_EMAIL, mEmail);
doUser();
super.onActivityResult(requestCode, resultCode, data);
fragManager.beginTransaction().remove(this).commit();
;
FragmentTransaction fragmentTransaction = fragManager
.beginTransaction();
fragmentTransaction.add(f, "xx" + REQUEST_CODE_PICK_ACCOUNT);
fragmentTransaction.commit();
【讨论】:
这确实有效,我只投了一票。即时创建片段。太容易了,但它真正的工作解决方案。甚至有人试图为我编辑它。【参考方案22】:对于许多嵌套片段(例如,在片段中使用 ViewPager 时)
在您的主要活动中:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
在您的片段中:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
for (Fragment fragment : getChildFragmentManager().getFragments())
fragment.onActivityResult(requestCode, resultCode, data);
在您的嵌套片段中
通话活动
getParentFragment().startActivityForResult(intent, uniqueInstanceInt);
uniqueInstanceInt - 用嵌套片段中唯一的 int 替换它,以防止另一个片段处理答案。
接收响应
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
if (requestCode == uniqueInstanceInt )
// TODO your code
注意
需要在 uniqueInstanceInt 中使用 0 到 65536 之间的数字以避免错误“只能将低 16 位用于 requestCode”。
【讨论】:
在 Activity > Fragment (ViewPager) > Fragment 中效果很好【参考方案23】:只需调用:
startActivityForResult(intent, "1");
【讨论】:
你能详细解释一下吗?【参考方案24】:对于嵌套片段(例如,使用 ViewPager 时)
在你的主要活动中:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
在您的主要***片段(ViewPager 片段)中:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
YourFragment frag = (YourFragment) getChildFragmentManager().getFragments().get(viewPager.getCurrentItem());
frag.yourMethod(data); // Method for callback in YourFragment
super.onActivityResult(requestCode, resultCode, data);
在 YourFragment(嵌套片段)中:
public void yourMethod(Intent data)
// Do whatever you want with your data
【讨论】:
【参考方案25】:如果在 Facebook 登录 中遇到上述问题,那么您可以在片段的父活动中使用以下代码,例如:
Fragment fragment = getFragmentManager().findFragmentById(android.R.id.tabcontent);
fragment.onActivityResult(requestCode, resultCode, data);
或者:
Fragment fragment = getFragmentManager().findFragmentById("fragment id here");
fragment.onActivityResult(requestCode, resultCode, data);
并在您的片段中添加以下调用...
callbackManager.onActivityResult(requestCode, resultCode, data);
【讨论】:
【参考方案26】:只需将以下代码用于片段。
@Override
public void onOtherButtonClick(ActionSheet actionSheet, int index)
if (index == 1)
Intent intent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
intent.setType("image/*");
startActivityForResult(Intent.createChooser(intent,
"Select Picture"), 1);
public void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == 1)
if (requestCode == 1)
Uri selectedImageUri = data.getData();
//selectedImagePath = getPath(selectedImageUri);
onActivityResult 将调用而不调用其父级。
【讨论】:
【参考方案27】:我也在片段中遇到了这个问题。我在DialogFragment
中调用了startActivityForResult
。
但是现在这个问题已经解决了: FragmentClassname.this.startActivityForResult
.
【讨论】:
太好了,对我有用,因为我从片段代码中的抽象类调用startActivityForResult(...)
。【参考方案28】:
在你的片段中,调用
this.startActivityForResult(intent, REQUEST_CODE);
this
指的是片段。否则按照@Clevester 说的做:
Fragment fragment = this;
....
fragment.startActivityForResult(intent, REQUEST_CODE);
我也不得不打电话
super.onActivityResult(requestCode, resultCode, data);
在父活动的onActivityResult
中使其工作。
(我根据@Clevester 的回答改编了这个答案。)
【讨论】:
【参考方案29】:解决方案 1:
请致电 startActivityForResult(intent, REQUEST_CODE);
而不是 getActivity().startActivityForResult(intent, REQUEST_CODE);
。
解决方案 2:
当startActivityForResult(intent, REQUEST_CODE);
被调用时,活动的onActivityResult(requestCode,resultcode,intent)
被调用,然后你可以从这里调用fragments onActivityResult()
,传递requestCode, resultCode and intent
。
【讨论】:
【参考方案30】:我强烈怀疑这里的所有答案都只不过是黑客行为。我已经尝试了所有这些以及许多其他方法,但没有任何可靠的结论,因为总是存在某种愚蠢的问题。我不能依赖不一致的结果。如果您查看 Fragments 的官方 Android API 文档,您会看到 Google 清楚地声明了以下内容:
从片段所在的 Activity 调用 startActivityForResult(Intent, int)。
见:Android Fragment API
因此,似乎最正确和最可靠的方法是从托管活动中实际调用 startActivityForResult() 并处理生成的 onActivityResult()在那里。
【讨论】:
我不认为“从 Activity 调用 startActivityForResult”是一个建议。如果您查看 Fragment 基类中的实现,那么它所做的就是mActivity.startActivityFromFragment(this, intent, requestCode)
- 所以它只是一个方便的包装器以上是关于片段中未调用 onActivityResult的主要内容,如果未能解决你的问题,请参考以下文章
片段android中未调用onActivityResult [重复]
Android:片段在活动结果合同中未收到 RESULT_OK