Android片段中的startActivityForResult()vs getActivity()。startActivityForResult()

时间:2017-12-14 06:53:31

标签: android android-fragments startactivityforresult

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

6 个答案:

答案 0 :(得分:3)

startActivityForResult()必须通过fragment onActivityForResult()来处理

getActivity().startActivityForResult()必须通过activity onActivityForResult()

来处理

<强>基本上

如果您使用的是fragment并希望在fragment上处理结果,请使用onActivityForResult(),否则,如果您想从{{1}处理它在片段中,使用activity

答案 1 :(得分:2)

startActivityForResult 来自其容器Activity的片段调用 startActivityForResult 。 对片段来说: -

  

从包含Activity的片段中调用startActivityForResult(Intent,int)。

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

答案 2 :(得分:1)

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

Inshort,为了获得活动的上下文,我们在其前面加上getActiviy()

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

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

如果我们将更多细节放在那里,

如果你将从你的片段中调用startActivityForResult(),那么requestCode将被拥有片段的Activity更改。

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

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

startActivityForResult(intent, 1);

使用

getActivity().startActivityForResult(intent, 1);

希望它有帮助..!

答案 3 :(得分:0)

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

答案 4 :(得分:0)

您必须参考Activity拨打电话,因为startActivityForResult(Intent intent, int requestCode)Activity中指定的方法。

因此,如果您从YourActivity致电,它已经有Activity的引用,如:

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

但是如果您从YourFragment调用它,则需要指定Activity引用,在这种情况下,引用将是包含YourFragment的活动;因此我们使用getActivity()然后触发startActivityForResult()

答案 5 :(得分:0)

“startActivityForResult()”适用于Activity类。 当您在Activity类中时,您可以直接使用此方法。 当你处于片段中时,因为片段在Activity上创建,你应该首先获得基于它的片段活动。的意思是:

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

现在你有了活动,我说,你可以对你从片段中获得的活动使用“startActivityForResult()”。

activity.startActivityForResult();

希望有所帮助。