![](/img/trans.png)
[英]getActivity().startActivityForResult() is not working in fragments
[英]startActivityForResult() vs getActivity().startActivityForResult() in Android Fragment
Android Fragment中startActivityForResult()
与getActivity().startActivityForResult()
之间的区别是什么? 在Fragment中调用onActivityForResult()
时的行为差异是什么?
startActivityForResult()
必须从fragment
的onActivityForResult()
处理它
getActivity().startActivityForResult()
必须从activity
的onActivityForResult()
处理它
基本上:
如果您在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.