【问题标题】:Preloading Fragments when App starts应用启动时预加载片段
【发布时间】:2023-03-16 03:53:01
【问题描述】:

我正在使用带有抽屉式导航菜单的应用程序,我希望在应用程序启动时创建所有片段,因为某些片段从 Web 服务获取数据,我不希望用户拥有等待所有数据在进入屏幕时立即加载。为了解决这个问题,我想一次创建所有片段,然后隐藏它们,然后显示正确的片段。

  private void initFragments() {
    FragmentManager fManager = getFragmentManager();
    FragmentTransaction fTransaction = fManager.beginTransaction();
    for (int i = 0; i < MAIN_FRAGMENTS; i++) {
        fTransaction.add(R.id.frame_container, fragmentArray[i], fragmentTags[i]);
    }
    fTransaction.commit();
    fManager.executePendingTransactions();
}
private void hideFragments(){
    FragmentManager fManager = getFragmentManager();
    FragmentTransaction fTransaction = fManager.beginTransaction();
    for (int i = 0; i < MAIN_FRAGMENTS; i++) {
        fTransaction.hide(fManager.findFragmentByTag(fragmentTags[i]));
    }
    fTransaction.commit();
    fManager.executePendingTransactions();
}

我的解决方法是创建所有片段,然后通过调用隐藏它们

initFragments()
hideFragments()

但是,我注意到当我在模拟器上运行它时,在某些设备上它只会正确显示一个 Fragment,其余的被添加但被隐藏。但是在其他一些设备上,它会显示所有的碎片重叠在一起,导致丑陋的混乱。此外,当我在平板电脑等横向设备上使用该应用程序时,片段也会相互重叠,因为我已强制该应用程序进入仅纵向模式。关于解决此问题的最佳方法的任何想法?

【问题讨论】:

  • 根据您的实现,我相信您从 Web 服务获取数据不需要任何用户输入,您只需获取一次并进行显示。您可以在启动活动中或之后的某个地方获取所需的所有数据,并将其存储在容器类中,然后顺利显示所有内容。而不是进行频繁的片段转换。

标签: android android-fragments fragment navigation-drawer preload


【解决方案1】:

你有什么错误吗?

我怀疑某些设备/版本可能不支持 findFragmentByTag() 方法或 hide() 方法。试着调查一下。

关于你在平板电脑上的重叠问题,试试这个:https://stackoverflow.com/a/11086185/2929693

【讨论】:

  • 似乎没有发生任何错误。此外,当我使用手机模拟器启动它时,重叠片段仅在模拟器首次启动时发生。关闭应用并重新打开后,不会出现重叠片段
  • 这可能是因为您是从onCreate() 方法调用它的,不是吗?尝试从onResume() 方法调用initFragments() 和/或 hideFragments()。如果您对 Activity 的不同状态感到好奇,请参阅official documentation
  • 我之前确实是从onCreate() 调用它,但我刚刚尝试在onResume() 中调用它们,它仍然给了我相同的结果。在一些设备上,它会以重叠的片段开始,但在应用重新启动后不会再出现。
  • This way 完成同样的事情似乎有点老套,但确实有效。您可以尝试这样做,直到有人提出更好的答案。
  • 顺便问一下,你确定你正在遍历所有设备上的 for 循环吗?您测试的所有设备都是 API 级别 11 或更高级别吗?这听起来很傻,但像这样简单的事情有时会引起最大的头痛。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-22
相关资源
最近更新 更多