Android 片段中的 startActivityForResult() 与 getActivity().startActivityForResult()

startActivityForResult() vs getActivity().startActivityForResult() in Android Fragment

在 Android 片段中 startActivityForResult()getActivity().startActivityForResult() 之间有什么区别?在 Fragment 中调用时 onActivityForResult() 的行为差异是什么?

我们可以在 Activity 中使用 startActivityForResult(),在 Fragment 中使用 getActivity().startActivityForResult()

简而言之,要获得 Activity 的上下文,我们在其前面加上 getActiviy()

相反,我们可以从 Actiivty 调用特定片段的 onActivityResult()。:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    for (Fragment fragment : getChildFragmentManager().getFragments()) {
        fragment.onActivityResult(requestCode, resultCode, data);
    }
}

如果再详细一点,

如果您将从您的片段中调用 startActivityForResult(),则请求代码将由拥有该片段的 Activity 更改。

因此,如果您想在 activity 中获得正确的 resultCode,您可以尝试以下操作:

不要使用:(在这种情况下):

startActivityForResult(intent, 1);

使用:

getActivity().startActivityForResult(intent, 1);

希望对您有所帮助..!

startActivityForResult() 必须从 fragmentonActivityForResult() 处理它

getActivity().startActivityForResult() 必须从 activityonActivityForResult()

处理它

基本上:

如果你在 fragment 上并且你想在 fragment 上处理结果,请使用 onActivityForResult(),否则如果你想在 [=14= 上处理它=] 的片段,使用 getActivity.startActivityForResult()

完全没有区别... 但有点不同的是 getActivity().startActivityForResult() 只能从片段中调用:)

startActivityForResult 来自片段调用 startActivityForResult 其容器 Activity . 所以对于片段:-

Call startActivityForResult(Intent, int) from the fragment's containing Activity.

而当您直接在片段中使用它时,可以根据请求进行某些特定更改 code.And 您将在 onActivityresult() 中获得修改后的请求代码,因为我遇到了一些问题最近修改了请求代码。你可以看看This Thread

您必须参考 Activity 进行调用,因为 startActivityForResult(Intent intent, int requestCode)Activity 中指定的方法。

因此,如果您从 YourActivity 调用,它已经有一个 Activity 的引用,例如:

YourActivity extends AppCompatActivity (which is subclass of `Activity`)

但是如果您从 YourFragment 调用它,您需要指定 Activity 引用,在本例中将是包含 YourFragment 的 Activity;因此我们使用 getActivity() 然后触发 startActivityForResult()

"startActivityForResult()" 适用于 Activity classes。 当你在Activity class时,你可以直接使用这个方法。 当你在 fragment 中时,因为 fragment 在 Activity 上创建,你应该首先获取基于它的 activity 那个 fragment。意思是:

//in fragment class:
Activity activity = this.getActivity();

现在你有了 activity,我说过,你可以在从片段中获得的 activity 上使用 "startActivityForResult()"。

activity.startActivityForResult();

希望有所帮助。