Fragment.getContext()
的文档说明了
返回Fragment当前关联的上下文。
它是在api 23中引入的 http://developer.android.com/reference/android/app/Fragment.html#getContext()
这是Application
还是Activity
Context
?
答案 0 :(得分:13)
简短回答
Fragment.getContext()
返回使用片段的活动的上下文
<强>详情
由于Fragment
类中的api 23引入了mHost
字段
// Activity this fragment is attached to.
FragmentHostCallback mHost;
Fragment.getContext()
使用它来获取上下文:
/**
* Return the {@link Context} this fragment is currently associated with.
*/
public Context getContext() {
return mHost == null ? null : mHost.getContext();
}
在片段getContext()
方法中获取活动的上下文之前,有几个步骤。
1)在活动初始化期间创建FragmentController
:
final FragmentController mFragments = FragmentController.createController(new HostCallbacks());
2)它使用HostCallbacks
类(内部类Activity
)
class HostCallbacks extends FragmentHostCallback<Activity> {
public HostCallbacks() {
super(Activity.this /*activity*/);
}
...
}
3)如您所见mFragments
保留对活动上下文的引用。
4)当应用程序创建片段时,它使用FragmentManager
。它的实例取自mFragments
(自API级别23)
/**
* Return the FragmentManager for interacting with fragments associated
* with this activity.
*/
public FragmentManager getFragmentManager() {
return mFragments.getFragmentManager();
}
5)最后,Fragment.mHost
字段设置在FragmentManager.moveToState(Fragment f, int newState, int transit, int transitionStyle, boolean keepActive)
方法中。
答案 1 :(得分:0)
至于FragmentActivity和继承 - &#39; getContext()&#39;仍会返回活动上下文,如果您要检查源代码,可能会看到这一点。