Android Fragment中startActivityForResult()
与getActivity().startActivityForResult()
之间的差异是什么?在Fragment中调用onActivityForResult()
时的行为差异是什么?
答案 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();
希望有所帮助。