我对是否在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一起使用的麻烦?
由于
答案 0 :(得分:10)
我想,当你想将一些UI业务逻辑绑定到特定的Fragment
(或一组)时,View
是一种有用的方法。如您所知,个人Fragment
有自己的生命周期回调等等,就像Activity
一样。
通过单个Activity
,只有ListView
个主机PagerAdapter
多个Fragment
,而可能更清洁,无法使用Fragment
方法因为ListView
只需要处理驱动单个ViewPager
背后的逻辑。
这与我刚刚面临的情况非常相似。我在Fragment
内显示各种垂直滚动形式(由许多输入字段组成)。在我的情况下,我采用了ViewPager
方法,因为在我的情况下,Activity
实际上可能需要在某些页面上显示完全不同的视图。例如,在前几页中,可能会显示用户输入表单。但在最后一页上,将显示一个图表。需要一组完整的逻辑来驱动该图。从单个Fragment
驱动那些输入表单和一个图表会有点混乱,我可能需要在几个委托类或其他东西中包含业务逻辑。所以对我来说,InputFormFragment
最终是明显的选择。我有GraphFragment
和View
,它们每个都只包含它们提供的View
的适用逻辑。
另一件需要考虑的事情是,在不久的将来,您也可能希望在ViewPager
中显示不同类型的ViewPager
。或者,您可能希望完全拥有另一个UI布局,也许是一个不使用Fragment
的UI布局,而是将它们全部左右显示(例如,在横向模式下在大型平板电脑上使用的布局)。使用Activity
s,事情变得更加模块化,您可以将代码考虑在内以便更快地完成此操作。另一方面,如果您使用包含简单PagerAdapter
的单个ListView
以及View
内的所有逻辑来实现您的目标,您可能会发现它需要更多工作。未来支持新的Fragment
或特殊平板电脑布局。
我要说的一件事就是ViewPager
通过FragmentPagerAdapter
和FragmentStatePagerAdapter
在Fragment
中实施ViewPager
,如果您有任何特殊要求,事情会有点尴尬;管理Fragment
有时候会很棘手。例如,对于我的UI,我需要能够以编程方式添加和删除包含Fragment
的{{1}}。我还需要确保使用的适配器在显示后不会销毁Fragment
,因为我需要在某个时刻同时从所有FragmentPagerAdatper
收集数据。此外,我必须扩展和修改Fragment
,以确保onDestroy()
正确地通过FragmentManager
ViewPager
,并在Fragment
ListView
时删除ViewPager
去掉了。
Fragment
支持一种非常模块化的方式来构建适用于各种屏幕大小和方向的UI,并且它们如何允许您为各个UI元素封装业务逻辑和生命周期。但是,如果你的场景真的和{{1}}中的几个{{1}}一样简单,并且你知道你永远不需要模块化,那么{{1}} s的开销可能是一种过度杀伤力。