当前位置: 首页 > 知识库问答 >
问题:

FragmentPagerAdapter和FragmentStatePagerAdapter之间有什么区别?

卢宜然
2023-03-14

FragmentPagerAdapterFragmentStatePagerAdapter之间有什么区别?

关于FragmentPagerAdapter,Google的指南说:

这个版本的分页器最适合在有几个典型的更静态的片段要分页时使用,比如一组选项卡。用户访问的每个页面的片段将保留在内存中,尽管其视图层次结构在不可见时可能会被破坏。这会导致使用大量内存,因为片段实例可以保持任意数量的状态。对于较大的页集,请考虑FragmentStatePagerAdapter

和关于FragmentStatePagerAdapter:

这个版本的分页器在有大量页面时更有用,工作起来更像列表视图。当页面对用户不可见时,其整个片段可能会被销毁,仅保留该片段的保存状态。与fragmentpageradapter相比,这使得分页器能够保留与每个访问的分页相关联的更少的内存,但在分页之间切换时可能会有更多的开销。

共有1个答案

东郭承业
2023-03-14

就像医生说的,这么想吧。如果您要做一个像阅读器一样的应用程序,您不会想要一次将所有的片段加载到内存中。您希望在用户读取时加载并销毁fragments。在这种情况下,您将使用FragmentStatePagerAdapter。如果您只是显示3个不包含大量繁重数据(如位图)的“选项卡”,那么FragmentPagerAdapter可能很适合您。此外,请记住viewpager默认情况下将加载3个片段到内存中。您提到的第一个适配器可能会破坏视图层次结构并在需要时重新加载它,第二个适配器只保存片段的状态并完全破坏它,如果用户随后返回到该页面,则会检索该状态。

 类似资料:
  • 我目前正在考虑应该使用PagerAdapter的哪个实现。我对他们俩都有两难的选择。让我给你看看这些是什么。 1#FragmentPagerAdapter 工作良好,当没有以前的实例可用时,它会创建片段的新实例,当有这样的机会时,它会检索以前的片段。 那不是很低效吗?我在Google I/O materials上看到Romain Guy说,创建新的效率不高,特别是当我们创建大量时,就像在中那样,因

  • 问题内容: 在此示例中: 无法编译为: 而被编译器接受。 这个答案说明唯一的区别是,与不同,它允许您稍后引用类型,似乎并非如此。 是什么区别,并在这种情况下,为什么不第一编译? 问题答案: 通过使用以下签名定义方法: 并像这样调用它: 在jls§8.1.2中,我们发现(有趣的部分被我加粗了): 通用类声明定义了一组参数化类型(第4.5节), 每种可能通过类型arguments调用类型参数节的类型

  • 问题内容: 今天,我按照一些说明在Linux中安装软件。有一个脚本需要首先运行。它设置一些环境变量。 指令告诉我要执行,但是我执行错误了。因此未设置环境。最后,我注意到了这一点并继续进行。 我想知道这两种调用脚本方法的区别。我对Linux完全陌生,所以请尽可能详细。 问题答案: 运行脚本,将启动一个新的运行脚本的外壳。新的外壳程序不会影响启动脚本的父外壳程序。 是的简写形式,它将在当前shell中

  • 问题内容: 我刚开始使用Spring。我遇到了很多教程。我看到使用更多的例子比。我查看了Spring文档,但无法弄清楚使用其中一个的好处。有人可以提供一些解释吗? 问题答案: 是的便捷子类。 JavaDoc描述了一些添加的属性,这些属性在某些情况下可能有用: UrlBasedViewResolver的便利子类,它支持InternalResourceView(即Servlet和JSP)以及诸如Jst

  • 问题内容: 我刚刚看到了包含标签的CSS代码。我看着MDN看看是什么,但我真的不明白。 有人可以解释它是如何工作的吗? 它会在我们通过CSS选择之前创建DOM元素吗? 问题答案: 根据这些文档,它们是等效的: 唯一的区别是CSS3中使用了双冒号,而单冒号是旧版本。 推理: CSS 3中引入了:: before表示法,以便在伪类和伪元素之间建立区别。浏览器还接受:在CSS 2中引入的表示法。

  • 问题内容: 以下哪个更好? 要么 我知道的唯一区别是,当“ a”为null时,第一个返回false,而第二个抛出异常。除此之外,它们是否总是给出相同的结果? 问题答案: 使用时,你需要B在编译时知道类。使用时可以是动态的,并且可以在运行时更改。