Android.app Fragments 和 android.support.v4.app 使用 ViewPager 有什么区别?

182
我有一个关于Android Support Libraries、Fragments和具体示例ViewPager类的问题。我的意图是创建一个功能类似于Android开发者网站提供的示例的应用程序(http://developer.android.com/training/animation/screen-slide.htmlhttp://developer.android.com/training/implementing-navigation/lateral.html)。通过查看它们的代码,我注意到它们使用了android.support.v4.app库,根据我的研究,这是访问ViewPager类的唯一方法。
在我的情况下,我对向后兼容性不感兴趣。最低API级别为14(冰淇淋三明治),构建目标为4.2 Jelly Bean。在其最简单的形式中,我的应用程序与我在Android dev网站上链接的第二个演示文稿完全相同 - 只需在每个选项卡中滑动三个选项卡之间的内容即可。
我阅读过的所有文章/帖子/答案似乎都非常喜欢v4 support library。现在,虽然我有点啰嗦,但是我要问的问题是:
  1. 使用android.support.v4.app结构化应用程序,从而使用SupportFragments,还是使用android.app中提供的Fragments - 为什么?
  2. 如果来自android.app的Fragments是正确的方法,则处理ViewPagers的最佳方式是什么?
  3. 如果SupportFragments最适合此任务,则我估计它们具有与其他支持库相同的功能 - 那么在android.app内部拥有它们的目的是什么?
希望有更清晰理解的人能给我一些澄清,因为我很困惑...

1
如果您正在使用 ViewPager,则不能使用 Fragments,您需要使用支持库中的 SupportFragment - tyczj
1
SupportFragment 不是 Android SDK 中的一个类... - Karakuri
2
@Karakuri 对于造成的困惑我感到抱歉;我并不是指字面上的 SupportFragment 类,我只是在提到 android.support.v4.app 中可用的 Fragment 类。 - jonstaff
@jonstaff 无论如何,你只能在支持库中使用片段类。 - tyczj
非常非常好的问题,我正在尝试做同样的事情并且在思考这个问题:如果我的应用程序运行在4.0及以上版本,为什么我需要切换到支持片段才能运行ViewPager?!?!现在又有一个新问题:v13...天哪。 - Edmond Tamas
显示剩余2条评论
3个回答

183
您可以使用来自android.app包的本机片段与android.support.v13.app包中的适配器一起使用ViewPager。您必须使用v13支持jar。
有两个版本的适配器可与ViewPager一起使用,v4包中的适配器适用于支持片段,v13中的适配器适用于本机片段。
现在有两个片段实现的原因是历史性的:Android 3引入了android.app包中的片段仅用于平板电脑,而支持库的创建是为了将片段带到运行旧版本的手机上。在Android 4上,你两者都有。
从我自己的经验来看,即使为Android 4开发,我也建议使用支持片段。以下是一些原因:Fragment or Support Fragment?

支持v13适用于ViewPager...直到您尝试在DialogFragment中使用ViewPager :-( - SteelBytes
android.app没有FragmentPagerAdapter,那么就无法使用android.app.Fragmentviewpager一起使用了?这里有什么想法吗?是否有旧的视图分页器选项?以便为给定的选项卡动态挂接片段。 - Nikhil
@Nikhil,FragmentPagerAdapter有两个版本。android.support.v4.app包中的一个版本适用于支持片段,而android.support.v13.app中的另一个版本适用于“普通”片段。 - brillenheini
我原本希望使用v13,以避免使用v4。结果发现v4是v13的依赖项,所以我最好使用support fragments/view pager。 - Vas

3
自 Android P(链接)起,android.app.Fragment 类已被弃用,因此应该在任何地方仅使用 android.support.v4.app.Fragment

1
如果你的目标API是11+,你不需要支持库[至少你的实际apk会更小)。
如果你想要支持Android 3.x之前的任何版本,你需要支持库。
这是你所问的吗?

9
他所问的是如何使用ViewPager,你需要使用支持库来实现。 - tyczj
@Matt 谢谢你的回答,但我正在寻找集成ViewPager功能的最佳解决方案,并解释为什么这个解决方案是最好的。 - jonstaff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接