LayoutInflater 是一个非常强大的工具,可以做非常酷的事情;例如从布局资源中膨胀片段并正确处理其生命周期。例如:
<fragment class="com.test.TestFrag".../>
当采用上述布局并通过 LayoutInflater 运行它时,您将获得由 Fragment 生成的视图。然后,您可以将此视图添加到任何 ViewGroup 并让片段的实例在周围运行,该片段仍然遵循片段生命周期。我的问题是,你如何从这个创建的视图中获取父片段?
在运行时确实没有机制让片段知道 ViewGroup 托管它的内容。也就是说,由于您的类将扩展基 Fragment 类,因此没有什么可以阻止您向 Fragment 添加实例变量以跟踪其父级的 ID。如果您的片段通过 FragmentTransaction 添加到视图层次结构中,那么您必须指定哪个容器将托管它,因为 FragmentTransaction::add 需要包含该片段的 ViewGroup 的 ID。如果您使用 XML 标记将其添加到 ViewHierarchy 中,我不明白为什么需要在运行时确定其父级,因为无论如何它都不会被动态添加。