在android编程中,
当我们将片段添加到特定布局时,
我们可以使用以下代码片段
Fragment fragment = new SampleFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.content_layout, fragment);
fragmentTransaction.commit();
或
Fragment fragment = SampleFragment.getInstance();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.content_layout, fragment);
fragmentTransaction.commit();
我不明白片段对象定义语句之间有什么区别。从一些源代码中,当使用“Fragment.getInstance()”(如单例模式)时,使用“getInstance(Bundle data)”方法参数将包数据传递给片段。
你能告诉我有什么区别吗?
2条答案
按热度按时间omtl5h9j1#
获取示例()for Fragment示例化是一种常见的设计模式,它封装了片段的创建及其参数。(),因为您可以传递额外的数据/包并“强制”用户使用此方法。(),它不会取代它。
这样,您将只有一个地方创建参数包,而不是每次都要示例化片段。
o0lyfsai2#
首先要注意的是,如果系统破坏了你的片段,必须重新创建它,它将调用无参数的构造函数。这意味着你必须把参数保存在某个地方以备以后使用(你不能创建带参数的构造函数)。
现在,让我们回到你的问题。目前,这两个代码块几乎是相同的,但只是对于你提供的例子。如果你应该传递一些参数给你的片段,事情就有点不同了。
getInstance
应该把所需的参数添加到你的片段中,保证它们在未来的时刻是可用的。我个人使用
getInstance/newInstance
(您可能会找到它的变体,现在,在Android Studio中使用newInstance
创建一个模板片段)方法传递该片段中所需的参数。例如,如果我需要该片段中的两个字符串,我将把它们传递给getInstance
方法,并将它们保存在片段参数中,以确保在重新创建片段时可以使用它们。当然,对于这个方法,您可以传递一个
Bundle
,但我认为通过这种方式,指定片段将使用的每个参数,会更清楚一些。也就是说,如果你想创建一个与上面的块等效的块,你应该使用类似于下面的代码:
最后,使用
getInstance
是为了防止代码重复(注意,如果您应该创建10次片段,则应该复制上述代码10次),如果您正确创建了片段(第二个代码块),则实际上不必使用getInstance
方法,但建议使用。