繁体   English   中英

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

[英]startActivityForResult() vs getActivity().startActivityForResult() in Android Fragment

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

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

getActivity().startActivityForResult()必须从activityonActivityForResult()处理它

基本上:

如果您在fragment并且想要处理fragment上的结果,请使用onActivityForResult() ,否则如果要从片段的activity处理它,请使用getActivity.startActivityForResult()

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

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

而当你直接在片段中使用它时,可以对请求代码进行一些特定的更改。你将在onActivityresult()中获得修改后的请求代码,因为我最近遇到了修改后的请求代码的一些问题。 你可以看看这个线程

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

Inshort,为了获得Activity of Context,我们在其中使用getActiviy()

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

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

如果我们把更多的细节,那么,

如果您将从Fragment调用startActivityForResult() ,则requestCode将由拥有Fragment的Activity更改。

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

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

startActivityForResult(intent, 1);

采用 :

getActivity().startActivityForResult(intent, 1);

希望能帮助到你..!

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

您必须参考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类。 当您在Activity类中时,您可以直接使用此方法。 当你处于片段中时,因为片段在Activity上创建,你应该首先获得基于它的片段活动。 手段:

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

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

activity.startActivityForResult();

希望有所帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM