【问题标题】:Where should use PageViewer?应该在哪里使用 PageViewer?
【发布时间】:2014-08-08 09:40:02
【问题描述】:

我已经实现了 ViewPagerFragment 的数量作为孩子,这里每个孩子都覆盖自己的onAttach, onCreateView, onViewCreated and setUserVisibleHint

在我的应用中,导航行为是随机的,并非每次都按顺序排列。由于页面查看器执行缓存来加载额外的孩子,这就是我的问题。我不确定何时应该初始化/释放子类的成员。

需要你们的建议,在这种情况下最好使用 PageViwer 还是我应该为每个组件使用传统的活动流。

【问题讨论】:

  • 关于随机导航,是不是说PagerAdapter里面的item的顺序会随机改变,已经缓存的“next”item应该不一样?或者这是否意味着顺序始终相同,但您想在超过 1 步的页面之间跳转?您能逐步描述示例场景吗?这将有助于给你一个全面的答案。
  • 对于缓存,如果您使用 FragmentStatePagerAdapter,它将为您管理页面。正如文档所说,“这个版本的寻呼机在有大量页面时更有用,更像列表视图。当用户看不到页面时,它们的整个片段可能会被破坏,只保留保存的那个片段的状态。” - developer.android.com/reference/android/support/v4/app/…

标签: android android-activity android-fragments navigation android-viewpager


【解决方案1】:

ViewPager 通常用于将有效的水平项目移动到项目导航。典型的用例是

  • 浏览相关项目(例如电子邮件、图片、专辑歌曲等)
  • 在标签之间滑动
  • 在类似向导的活动中来回滑动

有关更多详细信息,您可以阅读有关Swipe Views Android Design pattern 的部分。

关于生命周期,它基本上使用与任何其他 Fragment 相同的生命周期。唯一的区别是,生命周期方法的调用可能比您预期的稍晚或稍早,因为片段的缓存 ViewPager 实现了。

我不确定何时应该初始化/释放子类的成员。

您基本上应该依赖两种方法:onStart()onStop()。在onStart() 中,您创建类成员并初始化您想要的所有内容。在onStop() 方法中,您应该取消初始化所有内容并删除您在onStart() 中设置的所有侦听器。

方法setUserVisibleHint() 独立于onStart()onStop() 使用。您最好不要初始化或销毁其中的任何内容。您不能将其视为生命周期方法,因为它不是。它只是为了给你一个提示,你的片段对用户是可见的。您可以在此处启动或停止动画,或请求数据更新或执行类似任务。这是此方法的唯一目的。

需要你们的建议,使用它会更好吗 在这种情况下,PageViwer 或者我应该使用传统的活动流程 对于每个组件。

如果您的活动符合上述要点之一,我建议您使用ViewPager。否则,您可能会考虑其他选择。

更新:您很可能不会经常覆盖片段的onCreate()onDestroy() 生命周期方法。您将改用 onCreateView()onDestroyView() 方法。在那里您可以实现所谓的静态初始化,即在片段仍然存在时不会改变的初始化。这是布局初始化和类似的任务。

【讨论】:

  • 总的来说,我同意你的看法,但关于 onStart() 和 onStop() 的使用,我相信你错了。初始化成员的最佳位置是 onCreate() 和 onActivityCreated(),对 UI 相关的成员使用第二个。释放使用 onDestroy() 和 onDestroyView(),再次使用第二个释放 UI 相关成员。 onStart() 和 onStop() 适用于暂时禁用某些功能,而不是完全释放。
  • @Loop 问题是,如果你使用 onCreate() 和 onDestroy() 那么你的片段将继续接收更新并消耗资源,即使活动在后台但尚未销毁。如果您使用 onStart() 和 onStop(),您将更优化地使用系统资源。如果您使用 Otto 事件总线,那么这也是 Square 的建议。我在所有应用程序中都使用启动/停止,完全没有问题。但是,最后,创建/销毁也是一种解决方案。只是内存和 CPU 消耗可能会高一些。
  • Otto 示例就是我所说的禁用功能。换句话说,取决于服务等。那是正确的位置。但是@Shubh 询问了 Fragment 的成员哪些初始化/释放属于 onCreate() 以及我提到的其他方法。
【解决方案2】:

ViewPager 用法

屏幕幻灯片是整个屏幕到另一个屏幕之间的过渡,在设置向导或幻灯片等 UI 中很常见。

如果您对 Fragment 有很好的了解,那么 ViewPager 是实现的正确组件。 因为 viewpager 提供了一个可以添加片段运行时的地方。

例如。 如果你想在你的项目中使用 TabBar,那么 viewpager 是正确的使用组件。因为它提供了一个可以添加片段运行时的地方。标签栏在 android 应用程序中很常见。它提供了很多内置功能,我们可以使用它来添加片段运行时。 Facebook 应用程序使用 ViewPager 来管理标签。 Viewpager 为您的应用程序提供流畅性。

您可以从此网址下载示例并检查您的要求是否满足

You can download the Example here

【讨论】:

  • 嗨,我完全同意你在这里提到的,但我有提到的场景有问题。在这种情况下我是否应该使用 ViewPager,意味着应该如何管理覆盖方法调用。
【解决方案3】:

查看页面

  It is an widget 

  Allows the user to swipe left or right to see an entirely new screen. 

  Easy  to show the user multiple tabs

  Dynamically add and remove pages (or tabs) at anytime.

阅读更多:http://architects.dzone.com/articles/android-tutorial-using

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 2013-04-01
    • 1970-01-01
    相关资源
    最近更新 更多