对 Android 文档的说明:片段

Posted

技术标签:

【中文标题】对 Android 文档的说明:片段【英文标题】:Clarification on Android documentation : Fragments 【发布时间】:2013-08-22 12:46:15 【问题描述】:

该文档在 android 开发者网站的 Fragments 上有很好的定义,但我对 Fragments 中的一种特定生命周期方法表示怀疑

http://developer.android.com/guide/components/fragments.html

onAttach()片段与 活动(此处传入Activity)。

这个关联在内部有什么作用?

我进一步检查了这里

http://grepcode.com/file/repo1.maven.org/maven2/com.google.android/support-v4/r7/android/support/v4/app/Fragment.java?av=f

默认构造函数。每个片段都必须有一个空的构造函数,所以 它可以在恢复其活动状态时被实例化。它是 强烈建议子类不要有其他构造函数 带参数,因为这些构造函数不会被调用 片段被重新实例化;相反,参数可以由 调用者使用 setArguments(android.os.Bundle) 并稍后由 带有 getArguments() 的片段。应用程序通常不应 实现一个构造函数。第一个地方应用程序代码运行在哪里 可以使用的片段在 onAttach(android.app.Activity) 中, 片段与其活动实际关联的点。 一些应用程序可能还想实现 onInflate(android.app.Activity,android.util.AttributeSet,android.os.Bundle) 从布局资源中检索属性,但应该小心 在这里,因为发生这种情况是因为片段附加到它的

但同样的术语,但没有确切的解释。

【问题讨论】:

您可以将该行添加到您的 grepcode-sample 中,因此您不必搜索年龄 【参考方案1】:

Fragment 只是一个可以附加到Activity 或从 Activity 分离的组件。换句话说,Activity 就像是 Fragment 的宿主。

为了知道 Fragment 何时附加,或从宿主 Activity 分离,它提供了 2 个回调方法:onAttach() - 将 Fragment 添加到 Activity 时由系统调用onDetach() - 从活动中删除片段时由系统调用

当他们说“片段已与活动关联”时,表示片段已添加到活动中,这意味着从这里您可以调用getActivity()

【讨论】:

【参考方案2】:

这里的问题是这个关联在内部是做什么的?

我在下面的 FragmentManager 类中找到了我正在寻找的代码, 这准确地显示了以下 ASSOCIATION 是如何产生的,

片段已与活动关联

https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/app/FragmentManager.java

                f.mActivity = mActivity;
                f.mParentFragment = mParent;
                f.mFragmentManager = mParent != null
                        ? mParent.mChildFragmentManager : mActivity.mFragments;
                f.mCalled = false;
                f.onAttach(mActivity);

上面的代码做了Fragment关联的Activty的赋值,然后调用onAttach(..)

【讨论】:

以上是关于对 Android 文档的说明:片段的主要内容,如果未能解决你的问题,请参考以下文章

Android 嵌套片段方法

片段不去活动 [Android]

Android:使用 putExtra 从片段访问容器活动对象?

Android非UI片段使用[重复]

Android之DOM解析XML

Android之DOM解析XML