支持库中的Fragment中的getContext和getActivity有什么不同?

时间:2015-08-26 12:49:31

标签: android

支持库中getContext()的{​​{1}}和getActivity()有何不同?

他们总是返回同一个对象吗? (与当前片段相关的活动)

7 个答案:

答案 0 :(得分:5)

到目前为止,唯一提供的FragmentHostCallback实现(在操作系统和支持库中)始终为getContext()getActivity()返回相同的值。

然而,FragmentHostCallback的其他构造函数表明,在将来的实现中,我们可能会得到:

  • null Activity和非ContextActivity。这看起来不太可能,但我们可以想象片段可以在未来的活动之外使用,或者完全沙盒化。
  • 非空Activity和非空Context,它与Activity的实例不同。例如,Context可以是ContextThemeWrapper

结论:,如果可以,请使用getContext()。如果您需要特定于活动的呼叫,请使用getActivity()

答案 1 :(得分:3)

Activity是Context的子类。 Activity还有Window元素和访问UI方法,Context没有。但是,在大多数情况下,如果只需要Context,它就是一样的。

答案 2 :(得分:1)

getContext(): - 返回视图当前运行的上下文。通常是当前活动的Activity。 getContext()未在活动中定义。它在View(或View子类)中用于获取对封闭上下文(Activity)的引用。

getActivity(): - 此方法提供Activity的上下文。你可以使用它就像yourActivity.this。 getActivity()通常用于片段中,以获取插入或膨胀它们的活动的上下文。

答案 3 :(得分:1)

<强> @mlevytskiy 请检查this Stactoverflow答案。我希望它会对你有所帮助。

getContext() - 仅返回当前正在运行的活动的上下文视图。

getActivity() - 返回此片段当前与之关联的活动。

可以在片段中使用

getActivity()来获取片段的父 活动

答案 4 :(得分:0)

/**
     * 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

答案 5 :(得分:-1)

您可以使用getActivity(),它返回与片段关联的活动。活动是一个上下文(因为Activity扩展了Context)。 如果在相应片段的onAttach之前调用getActivity(),则getContext()可以返回null。 Context为新创建的组件提供有关Actvity或Application的信息。应该为新创建的组件(无论是应用程序上下文还是活动上下文)提供相关上下文。由于Activity是Context的子类,因此可以使用它来获取该活动的上下文。 <jazn-realm default="jazn.com"> <realm> <name>jazn.com</name> <users> <user> <name>user1</name> <credentials>{903}I8hy/xEW1elDCG8QWE7n2C6WAT6MF22v2jpkMSVdHUk=</credentials> <display-name>user1</display-name> </user> <user> <name>user2</name> <credentials>{903}obu0YOPXqe0RuRqhRhJjBjx3zLIb1bdMQQypod5RGJc=</credentials> <display-name>user2</display-name> </user> </users> </realm> </jazn-realm> <policy-store> <applications> <application> <name>AdminPnel</name> <app-roles> <app-role> <name>AdminRole</name> <class>oracle.security.jps.service.policystore.ApplicationRole</class> <display-name>AdminRole</display-name> <members> <member> <class>oracle.security.jps.internal.core.principals.JpsXmlUserImpl</class> <name>user1</name> </member> </members> </app-role> <app-role> <name>EditRole</name> <class>oracle.security.jps.service.policystore.ApplicationRole</class> <display-name>EditRole</display-name> <members> <member> <class>oracle.security.jps.internal.core.principals.JpsXmlUserImpl</class> <name>user2</name> </member> </members> </app-role> </app-roles> <jazn-policy> <grant> <grantee> <principals> <principal> <class>oracle.security.jps.service.policystore.ApplicationRole</class> <name>AdminRole</name> </principal> </principals> </grantee> <permissions> <permission> <class>oracle.adf.share.security.authorization.RegionPermission</class> <name>view.pageDefs.uploadPageDef</name> <actions>view</actions> </permission> <permission> <class>oracle.adf.share.security.authorization.RegionPermission</class> <name>view.pageDefs.editPageDef</name> <actions>view</actions> </permission> </permissions> </grant> <grant> <grantee> <principals> <principal> <class>oracle.security.jps.service.policystore.ApplicationRole</class> <name>EditRole</name> </principal> </principals> </grantee> <permissions> <permission> <class>oracle.adf.share.security.authorization.RegionPermission</class> <name>view.pageDefs.editPageDef</name> <actions>view</actions> </permission> </permissions> </grant> </jazn-policy> </application> </applications> </policy-store> 仅返回当前正在运行的活动的上下文视图。

答案 6 :(得分:-1)

getContext()

  

仅返回当前正在运行的活动的上下文视图。

getActivity()

  

返回此片段当前与之关联的活动。