【问题标题】:Application design using Fragments, ViewPager, PullToRefresh使用 Fragments、ViewPager、PullToRefresh 进行应用程序设计
【发布时间】:2013-03-07 13:19:43
【问题描述】:

我现在正在开发主 Activity 扩展 FragmentActivity(支持库)的 Android 应用程序。该活动包含ViewPager 视图,适配器为FragmentStatePagerAdapter。确切地说,适配器是一个自定义子类,它扩展了 FragmentStatePagerAdapter。

Adapter 类有 getItem() 方法来返回一个 Fragment 实例。我将这些片段存储在 SparseArray 中,而不是在每次调用 getItem() 时创建新片段。当activity被销毁时,我清空了这个数组,所以我希望在activity被重新创建时再次创建所有这些片段。

有一种情况:用户启动应用程序,然后转到 Android 的主(启动器)屏幕,与其他应用程序一起工作,然后 Android 操作系统终止我们的应用程序以释放内存。当用户回到我们的应用程序时(它不是从一开始就重新启动,而是从用户离开的地方重新创建和恢复),我观察以下回调调用序列:

Application: onCreate() called
Fragment: onAttach() called
Fragment: onCreate() called
Activity: onCreate() called
Fragment: onViewCreated() called
Activity: onStart() called

有不止一个 Fragment(ViewPager 为当前一个调用 getItem(),而它的两个相邻 - 下一个和上一个),但让我们考虑只有一个 Fragment 来简化它。

我曾经认为应该比片段更早地调用活动的 onCreate()。这在应用从之前被操作系统杀死的后台状态中恢复时发生。

我想在显示此活动中的任何内容之前执行一些后台操作(包括片段,所以我不希望这么早调用它们的 onCreate() 方法)。在所描述的情况下,我该怎么做?

【问题讨论】:

  • 何时检查和更新数据取决于您的应用实际执行的操作。如果您的应用程序具有从远程源提取的动态数据,那么您可能希望每隔 15-30 分钟更新一次数据。如果您的应用正在显示实时结果,您可能需要更频繁地轮询。如果您的应用程序使用静态数据,那么您只需加载一次数据而无需再次检查。在不知道应用在做什么的情况下,很难知道何时应该检查数据。
  • 好的,让我们考虑这不是数据加载,而是在显示任何内容之前要执行的一些通用操作。最后我可能问错了问题,因为我很感兴趣为什么会这样?编辑了问题。

标签: java android android-fragments android-viewpager


【解决方案1】:

我发现最好使用onActivityCreated() 回调来确保此时创建主机活动。所以没有必要在 Fragment 的 onCreate() 方法中对 UI 做一些重要的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    相关资源
    最近更新 更多