Android 片段中的 startActivityForResult() 与 getActivity().startActivityForResult()
startActivityForResult() vs getActivity().startActivityForResult() in Android Fragment
在 Android 片段中 startActivityForResult()
与 getActivity().startActivityForResult()
之间有什么区别?在 Fragment 中调用时 onActivityForResult()
的行为差异是什么?
我们可以在 Activity 中使用 startActivityForResult()
,在 Fragment 中使用 getActivity().startActivityForResult()
。
简而言之,要获得 Activity 的上下文,我们在其前面加上 getActiviy()
。
相反,我们可以从 Actiivty 调用特定片段的 onActivityResult()。:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
for (Fragment fragment : getChildFragmentManager().getFragments()) {
fragment.onActivityResult(requestCode, resultCode, data);
}
}
如果再详细一点,
如果您将从您的片段中调用 startActivityForResult()
,则请求代码将由拥有该片段的 Activity 更改。
因此,如果您想在 activity 中获得正确的 resultCode,您可以尝试以下操作:
不要使用:(在这种情况下):
startActivityForResult(intent, 1);
使用:
getActivity().startActivityForResult(intent, 1);
希望对您有所帮助..!
startActivityForResult()
必须从 fragment
的 onActivityForResult()
处理它
getActivity().startActivityForResult()
必须从 activity
的 onActivityForResult()
处理它
基本上:
如果你在 fragment
上并且你想在 fragment
上处理结果,请使用 onActivityForResult()
,否则如果你想在 [=14= 上处理它=] 的片段,使用 getActivity.startActivityForResult()
完全没有区别...
但有点不同的是 getActivity().startActivityForResult() 只能从片段中调用:)
startActivityForResult 来自片段调用 startActivityForResult 其容器 Activity .
所以对于片段:-
Call startActivityForResult(Intent, int) from the fragment's containing Activity.
而当您直接在片段中使用它时,可以根据请求进行某些特定更改 code.And 您将在 onActivityresult() 中获得修改后的请求代码,因为我遇到了一些问题最近修改了请求代码。你可以看看This Thread。
您必须参考 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 classes。
当你在Activity class时,你可以直接使用这个方法。
当你在 fragment 中时,因为 fragment 在 Activity 上创建,你应该首先获取基于它的 activity 那个 fragment。意思是:
//in fragment class:
Activity activity = this.getActivity();
现在你有了 activity,我说过,你可以在从片段中获得的 activity 上使用 "startActivityForResult()"。
activity.startActivityForResult();
希望有所帮助。
在 Android 片段中 startActivityForResult()
与 getActivity().startActivityForResult()
之间有什么区别?在 Fragment 中调用时 onActivityForResult()
的行为差异是什么?
我们可以在 Activity 中使用 startActivityForResult()
,在 Fragment 中使用 getActivity().startActivityForResult()
。
简而言之,要获得 Activity 的上下文,我们在其前面加上 getActiviy()
。
相反,我们可以从 Actiivty 调用特定片段的 onActivityResult()。:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
for (Fragment fragment : getChildFragmentManager().getFragments()) {
fragment.onActivityResult(requestCode, resultCode, data);
}
}
如果再详细一点,
如果您将从您的片段中调用 startActivityForResult()
,则请求代码将由拥有该片段的 Activity 更改。
因此,如果您想在 activity 中获得正确的 resultCode,您可以尝试以下操作:
不要使用:(在这种情况下):
startActivityForResult(intent, 1);
使用:
getActivity().startActivityForResult(intent, 1);
希望对您有所帮助..!
startActivityForResult()
必须从 fragment
的 onActivityForResult()
处理它
getActivity().startActivityForResult()
必须从 activity
的 onActivityForResult()
基本上:
如果你在 fragment
上并且你想在 fragment
上处理结果,请使用 onActivityForResult()
,否则如果你想在 [=14= 上处理它=] 的片段,使用 getActivity.startActivityForResult()
完全没有区别... 但有点不同的是 getActivity().startActivityForResult() 只能从片段中调用:)
startActivityForResult 来自片段调用 startActivityForResult 其容器 Activity . 所以对于片段:-
Call startActivityForResult(Intent, int) from the fragment's containing Activity.
而当您直接在片段中使用它时,可以根据请求进行某些特定更改 code.And 您将在 onActivityresult() 中获得修改后的请求代码,因为我遇到了一些问题最近修改了请求代码。你可以看看This Thread。
您必须参考 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 classes。 当你在Activity class时,你可以直接使用这个方法。 当你在 fragment 中时,因为 fragment 在 Activity 上创建,你应该首先获取基于它的 activity 那个 fragment。意思是:
//in fragment class:
Activity activity = this.getActivity();
现在你有了 activity,我说过,你可以在从片段中获得的 activity 上使用 "startActivityForResult()"。
activity.startActivityForResult();
希望有所帮助。