7

我有一个关于是否将 View 或 Fragment 与 ViewPager 一起使用的问题。

背景:我有一个包含 ListView 的活动 A。每个 ListView 项目都会打开 Activity B。Activity B 显示不同的内容,具体取决于在 Activity A 中点击的 ListView 项目。Activity B 的内容显示在 ListView 内。

问题:现在,我不需要在 Activity A 和 B 之间来回切换内容,而是需要在 Activity B 中实现水平视图滑动来切换内容。我找到的一种解决方案(尝试过并且有效)是创建Activity B 的 ListView 的许多实例,并将其与 ViewPager + PagerAdapter 一起使用。在文档上找到的另一个潜在解决方案(尚未尝试过)是将 ListView 放入片段中,创建片段的许多实例并将其与 ViewPager + FragmentPagerAdapter 或 FragmentStatePagerAdapter 一起使用。

我的问题是,使用每种方法有什么好处?我应该经历将 ListView 带入 Fragment 的所有麻烦,还是只是简单地将 ListView 与 ViewPager 一起使用?

谢谢

4

1 回答 1

12

Fragment我认为,当您想将一些 UI 业务逻辑绑定到特定View(或一组)时, A是一种有用的方法。如您所知,该个人Fragment有自己的生命周期回调等等,就像Activity会一样。

与其让一个Activity主机ListView通过一个单一的多个 s PagerAdapter,使用这种方法可能更简洁,Fragment因为Fragment它只需要处理驱动一个单一的背后的逻辑ListView

这与我刚刚面临的情况非常相似。我在ViewPager. 在我的情况下,我选择了这种Fragment方法,因为在我的情况下,ViewPager实际上可能需要在某些页面上显示完全不同的视图。例如,在前几页上,可能会显示用户输入表单。但在最后一页上,将显示一个图表。需要一整套单独的逻辑来驱动该图。从一个单一的驱动这些输入表单和一个图表Activity会有点混乱,我可能需要在几个委托类或其他东西中包含业务逻辑。所以对我来说,Fragments 是最终的明显选择。我有我的InputFormFragment和一个GraphFragmentView,并且它们每个都只包含它们提供的 s的适用逻辑。

另一件要考虑的事情是,在不久的将来,您可能也想View在您的ViewPager. 或者,您可能想要完全拥有另一种 UI 布局,可能不使用ViewPager但将它们全部并排显示(例如,在横向模式下用于大型平板电脑的布局)。使用Fragments,事情变得更加模块化,您可以考虑代码以更快地完成此操作。另一方面,如果您通过使用一个Activity包含简单PagerAdapter和所有 s 内部逻辑的单个来实现您的目标ListView,您可能会发现将来需要更多的工作来支持新类型的Views 或特殊的平板电脑布局。

我要说的一件事是我自己通过and实现Fragment了 s,如果你有任何特殊要求,事情会变得有点尴尬;有时管理s 可能很棘手。例如,对于我的 UI,我需要能够以编程方式添加和删除包含s. 我还需要确保正在使用的适配器一旦显示就不会破坏s,因为我需要在某个时间点同时从所有 s 收集数据。此外,我必须扩展和修改以确保s正确地通过它们并在 s 被删除时从 s中删除。ViewPagerFragmentPagerAdapterFragmentStatePagerAdapterFragmentViewPagerFragmentFragmentFragmentFragmentPagerAdatperFragmentonDestroy()FragmentManagerViewPager

Fragments 支持为各种屏幕尺寸和方向构建 UI 的非常模块化的方式,并且在它们允许您封装单个 UI 元素的业务逻辑和生命周期方面非常出色。ListView但是,如果您的场景真的像 a 中的几个 s一样简单,ViewPager并且您知道您永远不需要模块化,那么Fragments 的开销可能是多余的。

于 2012-10-09T17:13:35.203 回答