支持库中getContext()
的{{1}}和getActivity()
有何不同?
他们总是返回同一个对象吗? (与当前片段相关的活动)
答案 0 :(得分:5)
到目前为止,唯一提供的FragmentHostCallback
实现(在操作系统和支持库中)始终为getContext()
和getActivity()
返回相同的值。
然而,FragmentHostCallback
的其他构造函数表明,在将来的实现中,我们可能会得到:
Activity
和非Context
非Activity
。这看起来不太可能,但我们可以想象片段可以在未来的活动之外使用,或者完全沙盒化。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)