1

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

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

onAttach()当片段与活动关联时调用(此处传入活动)。

这个协会在内部做什么?

我进一步检查here

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) 提供,然后由 Fragment 使用 getArguments() 检索。应用程序通常不应实现构造函数。片段准备好使用的第一个应用程序代码在 onAttach(android.app.Activity)中,片段实际与其活动相关联的点. 一些应用程序可能还希望实现 onInflate(android.app.Activity,android.util.AttributeSet,android.os.Bundle) 以从布局资源中检索属性,但此处应注意,因为片段附加到其}

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

4

2 回答 2

2

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

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

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

于 2013-08-20T13:42:03.907 回答
1

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

我在下面的 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(..)

于 2013-08-21T08:13:13.397 回答