Android:Fragment 新的 getContext() 方法是哪个上下文?
Posted
技术标签:
【中文标题】Android:Fragment 新的 getContext() 方法是哪个上下文?【英文标题】:Android: Fragment's new getContext() method is which context? 【发布时间】:2015-12-03 14:44:29 【问题描述】:Fragment.getContext()
的文档是这样说的
返回 Fragment 当前关联的上下文。
在 api 23 中引入 http://developer.android.com/reference/android/app/Fragment.html#getContext()
这是Application
还是Activity
Context
?
【问题讨论】:
***.com/questions/8215308/using-context-in-fragment 【参考方案1】:简答
Fragment.getContext()
返回使用fragment的activity的上下文
详情
由于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()
方法中获取 Activity 的上下文之前有几个步骤。
1) 在Activity的初始化过程中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)
方法中设置。
【讨论】:
令人沮丧。 android 中长期以来引入的最有用的方法,但需要 API 23,这意味着任何严肃的项目都不太可能使用它至少几年。【参考方案2】:至于 FragmentActivity 和继承 - 'getContext()' 仍然会返回活动上下文,如果你检查源代码,你可能会看到。
【讨论】:
你是对的,但问题是关于新的Fragment#getContext()
,而不是FragmentActivity#getContext()
。
我说的是Fragment#getContext()
以上是关于Android:Fragment 新的 getContext() 方法是哪个上下文?的主要内容,如果未能解决你的问题,请参考以下文章
Android 微信 底部tab 切换时是新的activity 还是 fragment
在 Fragment 中设置一个新的 ListAdapter