【问题标题】:Fragment initialized without onCreate being called在没有调用 onCreate 的情况下初始化片段
【发布时间】:2019-04-06 12:55:31
【问题描述】:

所以我在 viewpager 中有一个片段,该片段包含在一个片段中,该片段正在初始化,如调试器所示,但没有 onCreate、onCreateView 或任何此类方法被调用。包含的活动有一个底部导航视图并包含 4 个这样的片段,这个问题只发生在 1 个这样的片段中。

所有这些 Fragment 和 viewpager 以及其中的 Fragment 都是在 Activity 的 oncreate 时创建的。如果我将创建片段的逻辑移动到单击底部选项卡时,则此问题将得到解决。

这怎么可能?

【问题讨论】:

  • 你应该显示你的代码,没有它很难找出问题
  • 检查 onCreateView() 方法
  • @YogeshNikamPatil 甚至 onCreateView 也不会为里面的片段调用
  • 能否请您提供设置viewpager和fragments的代码,您认为可能导致问题的任何代码请在此处发布,以便我们更好地为您提供帮助。
  • 你能给我们一些代码吗?

标签: android android-fragments android-viewpager android-fragmentactivity


【解决方案1】:

当第一次显示 viewpager 时,只会创建当前活动的片段和两个直接相邻的片段。所以第一页的片段,如果您“向左滚动”显示的页面片段,以及“向右滚动”时显示的页面片段。第 4 个片段将在其放在下一个形容词位置时创建。

因此,如果您在像 -a-[b]-c-d- 这样的视图页面中有片段 a、b、c、d,其中 b 是第一个可见页面,则在启动时只会创建 a、b 和 c。当您滚动到 c -a-b-[c]-d- 时,将调用片段 d 的 onCreate。

【讨论】:

  • 我认为你没有理解这个问题。页面偏移限制大于片段,因此确实调用并加载了 4 个片段。它里面的片段只被初始化了,但没有调用 onCreate。
  • 你想在fragment可见之前调用onCreate()做什么?
【解决方案2】:

您可以通过在视图寻呼适配器上将其设置为关闭屏幕页面限制来控制启动 Activity 时预加载的页面/片段数。像这样

  • mViewPager.setOffScreenPageLimit(limit)

如果您将限制设置为 0,则只会加载第一个片段。

https://spotandroid.com/2016/11/23/android-tricks-viewpager-and-offscreen-tabs/

https://techcodegeek.wordpress.com/2015/06/23/android-viewpager-and-performance-improvements/

【讨论】:

    【解决方案3】:

    需要更多细节来了解您的问题。您所提供的信息无法理解您面临的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-18
      • 2014-08-22
      • 1970-01-01
      • 2021-04-13
      • 2021-06-09
      • 1970-01-01
      相关资源
      最近更新 更多