Intereting Posts
Удаление папок из DDMS Элементы меню «Ящик навигации», выбранные в разных группах Java.lang.IllegalStateException: Фрагмент больше не существует для ключа f1: index 3 Камера всегда возвращает resultCode как 0 Повторное копирование нижней панели Google Maps «Не удалось выполнить повторную установку из-за разных подписей приложений» – возможно ли переопределить? Отправить электронную почту программно в Android Как загрузить файлы расширения apk в новую консоль разработчика Как создать пользовательскую палитру с пользовательским цветом для приложения Material Design? Динамически обновлять список с помощью адаптера Как уведомить вызывающую активность при завершении работы SyncAdapter? Как проверить скорость зарядки аккумулятора? Как показать Android-клавиатуру с режимом символов по умолчанию? Получить код состояния ответа с помощью Retrofit 2.0 и RxJava Определение CameraUpdate с помощью LatLngBounds с различными значениями заполнения

Android: новый метод getContext () Fragment – это какой контекст?

Документы для Fragment.getContext() говорят об этом

Возвращает контекст, с которым в данный момент связан фрагмент.

Он был введен в api 23 http://developer.android.com/reference/android/app/Fragment.html#getContext ()

Является ли это Context Application или Activity ?

Solutions Collecting From Web of "Android: новый метод getContext () Fragment – это какой контекст?"

Короткий ответ

Fragment.getContext() возвращает контекст активности, в котором используется фрагмент

Детали

Так как api 23 в классе Fragment было введено поле 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(); } 

Перед тем, как вы получите контекст Activity в методе getContext() выполните несколько шагов.

1) Во время инициализации FragmentController создается 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) .

Что касается FragmentActivity и inherited – 'getContext ()' все равно вернет контекст активности, вы можете увидеть это, если вы проверите исходный код.