为什么建议(不同来源)不要重载Fragment
的构造函数,而是使用静态Fragment.newInstance()
并将Bundle
传递给它?
重载构造函数时,只需显式定义默认值即可。如果由于某种原因重新创建Fragment
,则会使用onSaveInstanceState()
并在onCreate()
上提取后续数据。与使用Fragment.newInstance()
类似的情况,唯一的区别是您不需要创建公共默认构造函数。
我理解错了吗?非常感谢你。
答案 0 :(得分:28)
为什么建议(不同的来源)不要重载Fragments的构造函数,而是使用静态Fragment.newInstance()并将Bundle传递给它?
Android会在配置更改(例如,屏幕旋转)时自动重新创建所有未保留的片段,并且它将使用零参数构造函数。通过Bundle
提供的setArguments()
将保存为实例状态的一部分,并提供给新重新创建的片段。因此,您只需要实现一个方法(工厂方法)而不是三个(非零参数构造函数和 onSaveInstanceState()
和 {{1采取你建议的方法。
我理解错了吗?
如果适合你,那就去吧。如您所知,工厂方法方法是建议,而非要求。
答案 1 :(得分:4)
最好不要重载那个构造函数,因为Android可以在需要时杀死你的Fragments。并且,为了稍后重新创建它们,它将调用非参数构造函数。
要检索参数,只需调用getArguments()。
getArguments().getInt("myInt", 0);
即使重新创建了Fragment,参数仍然可用。