Fragment
我认为,当您想将一些 UI 业务逻辑绑定到特定View
(或一组)时, A是一种有用的方法。如您所知,该个人Fragment
有自己的生命周期回调等等,就像Activity
会一样。
与其让一个Activity
主机ListView
通过一个单一的多个 s PagerAdapter
,使用这种方法可能更简洁,Fragment
因为Fragment
它只需要处理驱动一个单一的背后的逻辑ListView
。
这与我刚刚面临的情况非常相似。我在ViewPager
. 在我的情况下,我选择了这种Fragment
方法,因为在我的情况下,ViewPager
实际上可能需要在某些页面上显示完全不同的视图。例如,在前几页上,可能会显示用户输入表单。但在最后一页上,将显示一个图表。需要一整套单独的逻辑来驱动该图。从一个单一的驱动这些输入表单和一个图表Activity
会有点混乱,我可能需要在几个委托类或其他东西中包含业务逻辑。所以对我来说,Fragment
s 是最终的明显选择。我有我的InputFormFragment
和一个GraphFragment
View
,并且它们每个都只包含它们提供的 s的适用逻辑。
另一件要考虑的事情是,在不久的将来,您可能也想View
在您的ViewPager
. 或者,您可能想要完全拥有另一种 UI 布局,可能不使用ViewPager
但将它们全部并排显示(例如,在横向模式下用于大型平板电脑的布局)。使用Fragment
s,事情变得更加模块化,您可以考虑代码以更快地完成此操作。另一方面,如果您通过使用一个Activity
包含简单PagerAdapter
和所有 s 内部逻辑的单个来实现您的目标ListView
,您可能会发现将来需要更多的工作来支持新类型的View
s 或特殊的平板电脑布局。
我要说的一件事是我自己通过and实现Fragment
了 s,如果你有任何特殊要求,事情会变得有点尴尬;有时管理s 可能很棘手。例如,对于我的 UI,我需要能够以编程方式添加和删除包含s. 我还需要确保正在使用的适配器一旦显示就不会破坏s,因为我需要在某个时间点同时从所有 s 收集数据。此外,我必须扩展和修改以确保s正确地通过它们并在 s 被删除时从 s中删除。ViewPager
FragmentPagerAdapter
FragmentStatePagerAdapter
Fragment
ViewPager
Fragment
Fragment
Fragment
FragmentPagerAdatper
Fragment
onDestroy()
FragmentManager
ViewPager
Fragment
s 支持为各种屏幕尺寸和方向构建 UI 的非常模块化的方式,并且在它们允许您封装单个 UI 元素的业务逻辑和生命周期方面非常出色。ListView
但是,如果您的场景真的像 a 中的几个 s一样简单,ViewPager
并且您知道您永远不需要模块化,那么Fragment
s 的开销可能是多余的。