【发布时间】:2016-07-06 21:43:11
【问题描述】:
我正在实现一个 Android 片段。我知道框架可以自动销毁和重新创建片段,并且重新创建片段会调用其默认构造函数,而不是具有参数的构造函数。
有许多帖子(例如对this question 的接受答案)展示了如何通过实现静态newInstance 方法为片段提供参数。
我不明白是谁打电话给newInstance。我的第一印象是 - 因为可以为这个 newInstance 方法定义任意参数 - 我应该在应用程序的某个地方添加一个显式调用,并且名称 newInstance 只是一个命名约定。但是,除了由框架调用默认构造函数创建的片段之外,我还要创建第二个片段,这让我感到困惑。
那么上面的假设是不是不正确,newInstance 方法在某种程度上真的是 Java 用于实例化类的内置方法的重载?在这种情况下,我看不出如何定义一个采用任意参数列表的newinstance 方法。或者这在 Java 中是否可行,而我只是对 Java 不太了解?
【问题讨论】:
-
是的,您需要在代码中调用
newInstance(),如果需要重新创建,框架将使用空构造函数。 -
P.S:有没有任何情况下您使用了 Fragment 而没有实例化它?即不使用
...= new ...? -
实际上,是的 - 它没有使用新的。在活动布局的 XML 中,我有一个
元素,据我所知,这就是片段的实例化方式。我在任何地方都没有明确的电话。无论如何,不确定它是如何工作的。 -
正确,此案例框架将使用空构造函数,没有参数,如果您直接使用
new或使用newInstance(),则需要空构造函数来重新创建片段(如果它被销毁了),newInstance不是一个被覆盖的方法,你可以随意命名它。