简体   繁体   English

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

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

What the differences between startActivityForResult() vs getActivity().startActivityForResult() in Android Fragment? Android Fragment中startActivityForResult()getActivity().startActivityForResult()之间的区别是什么? And what is the behaviour differences in onActivityForResult() when called in Fragment? 在Fragment中调用onActivityForResult()时的行为差异是什么?

startActivityForResult() must handle it from the fragment 's onActivityForResult() startActivityForResult()必须从fragmentonActivityForResult()处理它

getActivity().startActivityForResult() must handle it from the activity 's onActivityForResult() getActivity().startActivityForResult()必须从activityonActivityForResult()处理它

Basically: 基本上:

If you're on a fragment and you want to handle the result on the fragment , use onActivityForResult() , otherwise if you want to handle it from the activity of the fragment, use getActivity.startActivityForResult() 如果您在fragment并且想要处理fragment上的结果,请使用onActivityForResult() ,否则如果要从片段的activity处理它,请使用getActivity.startActivityForResult()

startActivityForResult from fragment call startActivityForResult of its container Activity. startActivityForResult来自片段调用其容器Activity的startActivityForResult So for Fragment:- 片段: -

Call startActivityForResult(Intent, int) from the fragment's containing Activity. 从包含Activity的片段中调用startActivityForResult(Intent,int)。

Whereas when you use it in fragment directly some certain changes can be made on request code.And you will get modified request code in onActivityresult(), Cause i have faced some problem with modified request code recently . 而当你直接在片段中使用它时,可以对请求代码进行一些特定的更改。你将在onActivityresult()中获得修改后的请求代码,因为我最近遇到了修改后的请求代码的一些问题。 You can have a look into This Thread . 你可以看看这个线程

We can use startActivityForResult() inside Activity and getActivity().startActivityForResult() inside a Fragment. 我们可以在Activity中使用startActivityForResult()在Fragment中使用getActivity().startActivityForResult()

Inshort, to get the Context of Activity we are preceeding it with getActiviy() . Inshort,为了获得Activity of Context,我们在其中使用getActiviy()

Instead, we can Call particular Fragment's onActivityResult() as below from Actiivty.: 相反,我们可以从Actiivty调用特定片段的onActivityResult(),如下所示:

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

If we put it to more details then, 如果我们把更多的细节,那么,

If You will call startActivityForResult() from your Fragment,the requestCode will be changed by the Activity that owns the Fragment. 如果您将从Fragment调用startActivityForResult() ,则requestCode将由拥有Fragment的Activity更改。

So, If you want to get the correct resultCode in your activity you can try as below : 因此,如果您想在活动中获得正确的resultCode,可以尝试如下:

DO NOT USE : (in such case): 不要使用:(在这种情况下):

startActivityForResult(intent, 1);

USE : 采用 :

getActivity().startActivityForResult(intent, 1);

Hope it helps..! 希望能帮助到你..!

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

You have to make a call with reference to Activity , since startActivityForResult(Intent intent, int requestCode) is method specified in Activity . 您必须参考Activity进行调用,因为startActivityForResult(Intent intent, int requestCode)是在Activity指定的方法。

So, if you call from YourActivity , it already has a reference of Activity like: 因此,如果您从YourActivity调用,它已经有一个Activity的引用,如:

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

But if you are calling it from YourFragment you need to specify Activity reference, which in this case will be the Activity containing YourFragment ; 但是如果你从YourFragment调用它,你需要指定Activity引用,在这种情况下,它将是包含YourFragment的Activity; hence we use getActivity() and then trigger startActivityForResult() 因此我们使用getActivity()然后触发startActivityForResult()

"startActivityForResult()" works on Activity classes. “startActivityForResult()”适用于Activity类。 when you are in Activity class, you can directly use this method. 当您在Activity类中时,您可以直接使用此方法。 when you are in fragment, because fragment creates on Activity, you should first get the activity that fragment based on it. 当你处于片段中时,因为片段在Activity上创建,你应该首先获得基于它的片段活动。 means: 手段:

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

now you have the activity and i said, you can use "startActivityForResult()" on activity that you get from fragment. 现在你有了活动,我说,你可以对你从片段中获得的活动使用“startActivityForResult()”。

activity.startActivityForResult();

hope helps. 希望有所帮助

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

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