Fragment.newInstance()vc onSaveInstanceState()

时间:2012-07-22 17:28:17

标签: android

为什么建议(不同来源)不要重载Fragment的构造函数,而是使用静态Fragment.newInstance()并将Bundle传递给它?

重载构造函数时,只需显式定义默认值即可。如果由于某种原因重新创建Fragment,则会使用onSaveInstanceState()并在onCreate()上提取后续数据。与使用Fragment.newInstance()类似的情况,唯一的区别是您不需要创建公共默认构造函数。

我理解错了吗?非常感谢你。

2 个答案:

答案 0 :(得分:28)

  

为什么建议(不同的来源)不要重载Fragments的构造函数,而是使用静态Fragment.newInstance()并将Bundle传递给它?

Android会在配置更改(例如,屏幕旋转)时自动重新创建所有未保留的片段,并且它将使用零参数构造函数。通过Bundle提供的setArguments()将保存为实例状态的一部分,并提供给新重新创建的片段。因此,您只需要实现一个方法(工厂方法)而不是三个(非零参数构造函数 onSaveInstanceState() {{1采取你建议的方法。

  

我理解错了吗?

如果适合你,那就去吧。如您所知,工厂方法方法是建议,而非要求。

答案 1 :(得分:4)

最好不要重载那个构造函数,因为Android可以在需要时杀死你的Fragments。并且,为了稍后重新创建它们,它将调用非参数构造函数。

要检索参数,只需调用getArguments()。

getArguments().getInt("myInt", 0);

即使重新创建了Fragment,参数仍然可用。