在ViewPager中使用View或Fragment

时间:2012-10-09 16:29:50

标签: android android-viewpager

我对是否在ViewPager中使用View或Fragment有疑问。

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

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

我的问题是,使用每种方法有什么好处?我是否应该解决将ListView引入Fragment或只是简单地将ViewView与ViewPager一起使用的麻烦?

由于

1 个答案:

答案 0 :(得分:10)

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

通过单个Activity,只有ListView个主机PagerAdapter多个Fragment,而可能更清洁,无法使用Fragment方法因为ListView只需要处理驱动单个ViewPager背后的逻辑。

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

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

我要说的一件事就是ViewPager通过FragmentPagerAdapterFragmentStatePagerAdapterFragment中实施ViewPager,如果您有任何特殊要求,事情会有点尴尬;管理Fragment有时候会很棘手。例如,对于我的UI,我需要能够以编程方式添加和删除包含Fragment的{​​{1}}。我还需要确保使用的适配器在显示后不会销毁Fragment,因为我需要在某个时刻同时从所有FragmentPagerAdatper收集数据。此外,我必须扩展和修改Fragment,以确保onDestroy()正确地通过FragmentManager ViewPager,并在Fragment ListView时删除ViewPager去掉了。

Fragment支持一种非常模块化的方式来构建适用于各种屏幕大小和方向的UI,并且它们如何允许您为各个UI元素封装业务逻辑和生命周期。但是,如果你的场景真的和{{1}}中的几个{{1}}一样简单,并且你知道你永远不需要模块化,那么{{1}} s的开销可能是一种过度杀伤力。