更重要的是,在onCreate / onCreateView中,我已经调用了FragmentManager.findFragmentByTag()来查找我片段的任何现有实例,它似乎找到了它。
那么putFragment / getFragment有什么意义呢?它是否会节省额外的东西或导致额外的生命周期事件发生?它只是findFragmentByTag()的替代品,它或多或少地做同样的事情吗?因为在我看来,片段是为我自动保存的,无需使用FragmentManager.putFragment()。
答案 0 :(得分:3)
那么putFragment / getFragment有什么意义呢?
根据当前的实现,putFragment(Bundle bundle, String key, Fragment fragment)
做的是将片段的索引放入带有参数键的bundle中。然后getFragment(Bundle bundle, String key)
将片段放在相同的索引处,该索引可以使用相同的密钥从捆绑中检索。只有在片段添加到FragmentManager之后,Fragment才会在其中有索引,因此只有在片段添加后才能在片段上调用putFragment()。
是否可以节省额外的费用或导致额外的生命周期内容 发生?
它仅保存片段的索引,不再保存其他内容,也不会导致任何其他生命周期内容。
它只是findFragmentByTag()的替代品,可以做更多或更多 不太相同的事情?
是的,我是这样的。
根据当前的实现,使用findFragmentByTag()
也可以实现putFragment / getFragment的功能。但是putFragment / getFragment的功能非常有限,因为你不能在没有bundle参数的情况下使用它们,这意味着你必须在putFragment()
中调用onSaveInstanceState()
。
答案 1 :(得分:0)
看起来像putFragment / getFragment它只是一种在片段管理器中存储片段及其状态而不显示它的安全方法。
例如,您的活动字段中存储了2个片段。您显示其中一个,然后在更改屏幕方向后将其替换为另一个。您的活动中的字段将重新启动,但当前显示的片段会保存其状态,而其他片段则不会。但是如果将片段存储在片段管理器中,则会有两个具有实际状态的片段。