花了相当多的时间弄清楚我的碎片从抽屉布局中选择的原因是由于编舞者跳过帧而没有显示有时(我使用的是transaction.replace而不是show / hide)它让我想知道 - 人们想要使用替换而不是显示/隐藏或分离/重新连接的情况是什么?当我切换到使用show / hide btw时,我的问题就消失了。
从this线程获取我得到了关于调用FragmentTransaction.replace()时会发生什么:
Android将有效地执行一系列的 FragmentTransaction.remove(...)(适用于当前添加到的所有片段 那个容器)和FragmentTransaction.add(...)(供你提供 分段)。从FragmentManager中删除片段将导致 要销毁的碎片及其状态将不再受管理。最 值得注意的是,当你重新添加Fragment时,所有的视图都会有 被重置。注意:由于您正在重用相同的Fragment实例, 片段仍将保留任何实例变量的值。
从this线程我得到的是,如果你计划再次使用该片段,那么显示/隐藏而不是替换它可能更好。我的问题是,你在哪些情况下使用FragmentTransaction.Replace()?我能看到它真正有用的唯一地方是你知道你不再需要的东西,有点像带有选项的对话选择器,但我在这些情况下使用对话框片段。
有没有人经常使用FragmentTransaction.replace,如果是这样,你为什么选择其他方法呢?干杯
答案 0 :(得分:1)
例如,在Multi-pane pattern中实现深层片段层次结构时可能很有用(当点击右侧片段中的项目时会将其移动到左侧的位置)。
此外,由于隐藏Fragment
会将其保留在FragmentManager
中,如果您的内容很重或隐藏多个实例,这可能会很昂贵。我认为,调用remove()
或replace()
并正确保存片段的状态更像Android。