与Java中的动态片段相比,使用XML中定义的静态片段有什么优缺点?以下是分类: 1.可维护性,2.兼容性,3.性能,4. UX
发布于 2016-10-12 15:42:48
通过XML使用片段或通过java代码动态使用片段有很大的不同,根据您选择的不同,主要区别将取决于用户如何体验应用程序的流程。
TLDR:下面的特性由通过FragmentManager安装的片段共享,并与java代码动态地共享(通过FragmentManager API),但是Java代码允许您在运行时更改、添加、删除每个片段,从而允许灵活性,否则这是不可能的。

但要回答你的问题:
1-可维护性--大致相同,您使用android:name属性定义要使用的fragment类,并使用:
// get fragment manager
FragmentManager fm = getFragmentManager();
// add fragment
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.your_placehodler, new YourFragment());
// alternatively add it with a tag
// trx.add(R.id.your_placehodler, new YourFragment(), "detail");
ft.commit();在只有一个事务的情况下,几乎没有任何努力。
兼容性:大约有相同的,两者都经常被开发人员使用。
3-性能,一次通货膨胀过程可能会更快一些,但它们本质上是甚至是。
4- UX:在这里,取决于您的需求,可能没有什么不同,或者是一个大。
那么,XML和“动态片段”之间的巨大区别是什么呢?
通过直接XML扩展实例化的片段不能通过在运行时通过FragmentManager动态管理。
举个例子,这意味着一旦你膨胀了片段/布局,你就不能把它发送到后台,很快就会带来另一个。碎片的动态管理可以用于将一个多用途活动内部的快速单流体验提供给用户,如果您从一个活动跳到另一个活动,这是不可能得到的。
在上面的初始FragmentTransaction之后,您可以非常快地为其他片段重用相同的布局容器。
// replace
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.your_placehodler, new YourFragment());
ft.commit();
// remove
Fragment fragment = fm.findFragmentById(R.id.your_placehodler);
FragmentTransaction ft = fm.beginTransaction();
ft.remove(fragment);
ft.commit(); “那么,为什么我们有XML实例化片段呢?我们现在就应该禁止它们!”
不要太快,例如,如果您的目的只是在应用程序中有一个多窗格窗口/布局,在其生命周期内不会改变太多的(即。如果您可以一直使用该布局,直到删除该活动),那么xml的膨胀就不会有任何缺点,并且取决于片段的数量,您可以避免大量的样板FragmentTransactions代码。
另一个重要的用例可以是简单地为使用不同的设备Configuration (如屏幕大小)或不同的屏幕方向(比如在平板和电话纵向/景观上使用该应用程序)做好准备,它是为这些(和其他)设备配置提供不同布局的简单解决方案。

资料来源:链接
链接
链接
https://stackoverflow.com/questions/23664906
复制相似问题