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

use*_*401 11 android fragment

对于文档Fragment.getContext()说,

返回Fragment当前与之关联的上下文.

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

这是ApplicationActivity Context

Ily*_*kov 13

简短的回答

Fragment.getContext() 返回使用片段的活动的上下文

细节

自从api 23在Fragment课堂上引入了mHost领域

// Activity this fragment is attached to.
FragmentHostCallback mHost;
Run Code Online (Sandbox Code Playgroud)

Fragment.getContext()用它来获取上下文:

/**
 * Return the {@link Context} this fragment is currently associated with.
 */
public Context getContext() {
    return mHost == null ? null : mHost.getContext();
}
Run Code Online (Sandbox Code Playgroud)

在fragment的getContext()方法中获取Activity的上下文之前有几个步骤.

1)在Activity的初始化FragmentController过程中创建:

final FragmentController mFragments = FragmentController.createController(new HostCallbacks());
Run Code Online (Sandbox Code Playgroud)

2)它使用HostCallbacks类(内部类Activity)

class HostCallbacks extends FragmentHostCallback<Activity> {
    public HostCallbacks() {
        super(Activity.this /*activity*/);
    }
...
}
Run Code Online (Sandbox Code Playgroud)

3)如您所见,mFragments保持对活动上下文的引用.

4)当应用程序创建它使用的片段时FragmentManager.它的实例取自mFragments(自API级别23以来)

/**
 * Return the FragmentManager for interacting with fragments associated
 * with this activity.
 */
public FragmentManager getFragmentManager() {
    return mFragments.getFragmentManager();
}
Run Code Online (Sandbox Code Playgroud)

5)最后,Fragment.mHostFragmentManager.moveToState(Fragment f, int newState, int transit, int transitionStyle, boolean keepActive)方法中设置字段.

  • 令人沮丧的地狱.在很长一段时间内在android中引入的最有用的方法,但需要API 23,这意味着任何严肃的项目都不可能在至少几年内使用它. (2认同)