Android:Fragment的新getContext()方法是哪个上下文?

时间:2015-09-08 03:39:45

标签: android fragment

Fragment.getContext()的文档说明了

  

返回Fragment当前关联的上下文。

它是在api 23中引入的 http://developer.android.com/reference/android/app/Fragment.html#getContext()

这是Application还是Activity Context

2 个答案:

答案 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;仍会返回活动上下文,如果您要检查源代码,可能会看到这一点。