startActivityForResult()
和getActivity().startActivityForResult()
在Android Fragment中有什么区别?当在Fragment中调用onActivityForResult()
时,行为上有什么不同?
startActivityForResult()
和getActivity().startActivityForResult()
在Android Fragment中有什么区别?当在Fragment中调用onActivityForResult()
时,行为上有什么不同?
startActivityForResult()
必须从fragment
的onActivityForResult()
中处理
getActivity().startActivityForResult()
必须从activity
的onActivityForResult()
中处理
基本上:
如果在fragment
上处理结果,则使用onActivityForResult()
,否则如果您想要从fragment
的activity
中处理它,则使用getActivity.startActivityForResult()
startActivityForResult()
,在Fragment中使用getActivity().startActivityForResult()
。getActiviy()
。@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
for (Fragment fragment : getChildFragmentManager().getFragments()) {
fragment.onActivityResult(requestCode, resultCode, data);
}
}
startActivityForResult()
,则requestCode将由拥有该Fragment的Activity更改。startActivityForResult(intent, 1);
getActivity().startActivityForResult(intent, 1);
startActivityForResult()
,而没有使用getActivity()
。这就是为什么我要问行为差异的原因。 - j.elmerstartActivityForResult
方法的整个目的是避免需要在 Activity 的 onActivityResult 中遍历所有 Fragment。这正是错误的做法。 - ianhanniballake完全没有区别... 但是稍微有一点不同的是 getActivity().startActivityForResult() 只能从 Fragment 中调用 :)
你需要使用关于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 类中时,可以直接使用此方法。 当你在 Fragment 中时,因为 Fragment 是依附于 Activity 创建的,所以你需要先获取 Fragment 所依附的 Activity。具体做法如下:
//in fragment class:
Activity activity = this.getActivity();
现在你已经拥有了活动并且我说过,你可以在从片段获取的活动上使用“startActivityForResult()”。
activity.startActivityForResult();
希望能有所帮助。