Подтвердить что ты не робот

Чем отличается getContext и getActivity от Fragment в библиотеке поддержки?

Чем отличаются getContext() и getActivity() от Fragment в библиотеке поддержки?

Они всегда возвращают один и тот же объект? (активность, связанная с текущим фрагментом)

4b9b3361

Ответ 1

В большинстве случаев нет никакой разницы, но...

Таким образом, первоначально Fragments были размещены в FragmentsActivity и тогда, чтобы получить Context называемый getActivity().

Только что проверенные источники и Fragments теперь могут быть размещены любым, кто реализует интерфейс FragmentHostCallback. И это изменилось в версии 23 библиотеки поддержки, я думаю.

При использовании более новой версии библиотеки поддержки, когда Fragment не размещается в Activity вы можете получить разные объекты при вызове getActivity() и getContext().

Когда вы вызываете getActivity() вы получаете Activity которая также является Context. Но когда вы звоните getContext вы получите Context, который не может быть Activity.

Ответ 2

Пока единственная предоставляемая реализация FragmentHostCallback (в ОС и в библиотеке поддержки) всегда возвращает одно и то же значение как для getContext() и для getActivity().

Однако другие конструкторы FragmentHostCallback предполагают, что в будущих реализациях мы можем получить:

  • Нулевая Activity и ненулевое Context, который не является Activity. Это выглядит невероятно, но мы можем представить, что фрагменты могут быть использованы вне Деятельности в будущем, или быть полностью изолированными.
  • Ненулевая Activity и ненулевое Context, который не является и тем же экземпляром, как Activity. Например, Context может быть ContextThemeWrapper.

Вывод: когда можете, используйте getContext(). Когда вам нужны вызовы, getActivity() деятельностью, используйте getActivity().

Ответ 3

Действие - это подкласс контекста. У Activity также есть элементы Window и доступ к UI-методам, Context - нет. Однако в большинстве случаев это то же самое, если вам нужен только контекст.

Ответ 4

getContext(): - Возвращает контекст, в котором в настоящее время выполняется представление. Обычно активна в настоящий момент. getContext() не определяется в Activity. Он используется в подклассе View (или View) для получения ссылки на охватывающий контекст (Activity).

getActivity(): - Этот метод дает контекст Activity. Вы можете использовать его как yourActivity.this. getActivity() обычно используется в фрагментах, чтобы получить контекст активности, в котором они вставлены или завышены.

Ответ 5

@mlevytskiy Проверьте этот Stactoverflow. Надеюсь, это поможет вам.

getContext() - возвращает контекстное представление только текущей текущей активности.

getActivity() - вернуть активность, с которой в данный момент связан этот фрагмент.

getActivity() может использоваться во Фрагменте для получения родительского Активность фрагмента.

Ответ 6

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

    /**
     * Return the {@link FragmentActivity} this fragment is currently associated with.
     * May return {@code null} if the fragment is associated with a {@link Context}
     * instead.
     */
    final public FragmentActivity getActivity() {
        return mHost == null ? null : (FragmentActivity) mHost.getActivity();
    }

из исходного кода, мы можем обнаружить, что когда фрагмент привязан к Activity, getContext возвращает null. Хотя getActivity возвращает null, когда фрагмент привязан к контексту, вместо этого

Ответ 7

Вы можете использовать getActivity(), который возвращает активность, связанную с фрагментом. Активность - это контекст (поскольку Activity расширяет контекст). getActivity() может возвращать значение null, если оно вызывается до onAttach соответствующего фрагмента. Контекст предоставляет информацию о Actvity или Application для вновь созданных компонентов. Соответствующий контекст должен быть предоставлен вновь созданным компонентам (контекст приложения или контекст активности). Поскольку Activity является подклассом Context, его можно использовать для получения этого контекста активности. getContext() Возвращает представление контекста только текущей текущей активности.

Ответ 8

getContext():

Возвращает контекстное представление только текущую текущую активность.

getActivity():

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