Android Fragments和多个构造函数

时间:2017-02-13 12:16:01

标签: android-fragments android-bundle onsaveinstancestate

使用以下方法初始化片段的区别是什么:

  • 静态newInstance(String a, int b)方法和Bundle参数。
  • VS。一个多参数构造函数MyFragment(String a, int b),前提是我还添加了一个无参数构造函数MyFragment()

如果它与系统如何初始化片段有关,那么onSavedInstanceState(Bundle bundle) vs MyFragment.newInstance(String a, int b)的目的是什么?

2 个答案:

答案 0 :(得分:0)

当OS需要销毁并重新创建你的片段时,它会使用空构造函数创建一个新的实例。

您在newInstance()中创建和设置的包将由OS保存并恢复,并且仅包含片段的初始参数。

你在onSavedInstanceState(Bundle)中收到的包是一个完全不同的包,你应该填充表示你的片段状态的字段(而不是前一个包中的初始参数)。 您在重新创建的片段实例中收到相同的包,并且可以在调用onActivityCreated(Bundle)时从中提取状态。

答案 1 :(得分:0)

  

前提是我还添加了一个无参数构造函数

在那种情况下。没有不同。

onSavedInstanceState而言,这是片段生命周期的进一步发展。如果您更新了从setArguments收到的参数,那么您需要实现一种方法来保存它们以保持状态,然后您将使用onSavedInstanceState Bundle 提供的onCreateView代替 getArguments

而不是