Fragment.newInstance()vc onSaveInstanceState()

为什么build议(不同的来源)不要重载Fragment的构造函数,但使用静态Fragment.newInstance()与传递一个Bundle

当你重载一个构造函数时,你只需明确地定义一个默认值 如果你的Fragment因为某种原因被重新创build,你可以使用onSaveInstanceState()onCreate()上的后续数据提取。 与使用Fragment.newInstance()类似的情况,唯一不同的是你不需要创build公共的默认构造函数。

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

Solutions Collecting From Web of "Fragment.newInstance()vc onSaveInstanceState()"

为什么build议(不同的来源)不要重载片段的构造函数,但使用静态Fragment.newInstance()与传递一个包到它?

Android会自动重新创buildconfiguration更改(例如,屏幕旋转)上的所有非保留片段,并使用零参数构造函数。 通过setArguments()提供的Bundle被保存为实例状态的一部分,并被赋予新创build的片段。 因此,你只需要实现一个方法(工厂方法),而不是三个(一个非零参数的构造函数 onSaveInstanceState() onViewStateRestored() )采取你build议的方法。

我理解错了什么?

如果它适合你,就去做吧。 正如你所看到的,工厂方法是一个build议,而不是一个要求。

更好的主意是不要重载构造函数,因为Android可以在需要的时候杀死你的Fragments。 而且,稍后重新创build它们,它将调用非参数构造函数。

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

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

即使您的片段被重新创build,参数也是可用的。