一个Fragment
是一个有用的方法,我想,当你要配合一些UI的业务逻辑到特定View
(或一组)。如您所知,个人Fragment
有其自己的生命周期回调等等,就像Activity
那样。
而不是具有通过单个PagerAdapter
单个Activity
主机许多ListView
s时,可能是吸尘器使用Fragment
的方法,因为仅Fragment
需要处理后面驱动单个ListView
的逻辑。
这与我刚刚面对的情况非常相似。我在ViewPager
内显示了各种垂直滚动表单(包含大量输入字段)。在我的情况下,我去了Fragment
方法,因为在我的情况下,ViewPager
实际上可能需要在某些页面上显示完全不同的视图。例如,在前几页中,可能会显示用户输入表单。但在最后一页上,会显示一个图表。需要一整套独立的逻辑来驱动该图。为了驱动这些输入表单,单个Activity
中的一个图形会有点混乱,我可能需要在几个委托类或其他东西中包含业务逻辑。因此,对我而言,Fragment
是最后的明显选择。我有我的InputFormFragment
和GraphFragment
,它们每个都只包含它们提供的View
的适用逻辑。
要考虑的另一件事是,在不久的将来,您也可能想要在ViewPager
中显示不同种类的View
。或者,您可能希望完全使用另一个用户界面布局,可能不是使用ViewPager
,而是将其全部并排显示(例如横向模式下大型平板电脑上使用的布局)。使用Fragment
时,事情只是更加模块化,您可以将代码分解为更快速的操作。另一方面,如果您通过使用包含简单PagerAdapter
以及ListView
的所有逻辑的单个Activity
实现了您的目标,您可能会发现将来需要做更多工作来支持新类型的View
或特殊的平板电脑布局。
有一件事我要说的是已经通过FragmentPagerAdapter
和FragmentStatePagerAdapter
在ViewPager
实施Fragment
小号自己,事情可能会变得,如果您有任何特殊的要求有点别扭;管理Fragment
有时可能会很棘手。例如,对于我的UI,我需要能够以编程方式添加和删除包含Fragment
的ViewPager
。我还需要确保所使用的适配器在被显示后不会破坏Fragment
,因为我需要在某个点同时收集所有Fragment
的数据。此外,我必须扩展并修改FragmentPagerAdatper
以确保Fragment
正确地通过onDestroy()
,并在ViewPager
被移除时从FragmentManager
中删除。
Fragment
s为各种屏幕尺寸和方向构建用户界面提供了一种非常模块化的方式,并且在如何允许您封装各个UI元素的业务逻辑和生命周期方面非常出色。但是,如果您的场景确实与ViewPager
中的几个ListView
一样简单,并且您知道您永远不需要模块化,那么Fragment
的开销可能是一种矫枉过正。
关于从片段收集信息,创建一个接口不是更容易吗,片段是否拥有对实现它的对象的引用,并使用接口函数将信息存储在该对象中? – 2013-01-14 09:39:31
如果我理解正确,我认为你的建议是,而不是需要做聪明的事情,以确保所有碎片留在ViewPager周围(并不是经常被杀死,然后再次创建),我应该有一个机制坚持自己的国家。我可以做到这一点,我同意这将是一个更好的方法,但我的特定应用程序中的碎片构造起来相当昂贵。由于编码和性能方面的原因,确保所有碎片保持在一起,然后请求他们都将数据一起提交,这更直接。 – Trevor