我的片段何时(及何处)创建

When (& where) are my fragments created

我正在使用 viewpagerindicator 库 (http://viewpagerindicator.com/) 为我的 android 应用程序创建某种向导。它运行良好,完全符合我的要求。

我想 "extend" 通过在我的 ActionBar 中添加 "previous"/"next" 按钮来稍微 "extend" 功能 - 与 Android 中的 [=36] 非常相似=] 教程 - 逐步完成向导。也很有魅力。

但是: 我想在 ActionBar 的按钮中显示有关 "next" & "previous" 片段的信息。我在 "creation" 时传递给 ViewPager 中的片段的信息(实际上是在对象实例化时 - 使用经典的 "newInstance(...)" 方法创建我的片段实例,存储Bundle 中的参数并在片段的 "onCreate" 方法中提取它们)。当您为项目创建新片段时,模板的工作方式相同。

因此,此信息是我实际上想要在我的向导按钮中显示的内容,以了解下一个片段和最后一个片段。

此信息的类型对我的问题并不重要。它可以是 String 或 icon 或 int 或...您想要的任何其他内容。

然而,无论我尝试访问我的片段数据,片段都还没有完全初始化(意味着它的 "onCreate" 方法还没有被调用)。

我已经在主机片段的 "onViewCreated" 方法中尝试过了,因为我认为那是它所有子视图应该已经初始化的地方(至少应该调用它们的 "onCreate" 方法,我想),但似乎对 ViewPager 的处理方式有所不同,以仅保留由 setOffscreenPageLimit 设置的内存中的片段数。

所以,我正在寻找(并且可能只是缺少)的是此处正确的回调方法。加载并初始化 ViewPager 的下一个片段时调用的一个。如果存在这样的回调,我可以将我的一小段代码放在那里以更新 ActionBar 中 "previous"/"next" 按钮中的文本。

非常感谢任何帮助、评论和想法。如果需要,我也可以尝试附上一些代码示例以更好地解释我的设置,但我认为应该很容易理解我的问题所在。

提前致谢!

P.S.: 我还尝试通过使用 EventBus 从我在 ViewPager 和托管片段中的片段发送 "onFragmentInitialized" 消息来做到这一点。它确实有效,但似乎不是执行此操作的正确方法。

当片段的 onCreate 方法被调用时,它已经准备好显示,实际上它已经过了被认为是下一个或上一个片段而不是被认为是当前片段的点。

在 FragmentManager 中提交事务后调用片段的 onCreateViews 方法。不到 1 秒即可将其呈现在用户面前(取决于设备和运行时环境)

但在你的情况下,你的数据应该在使用它的片段之外进行初始化,并通过传递数据本身然后显示你想要的任何形式来显示在任何你想要的地方。

将您的数据与 android 对象(片段,Activity ...)分离,您应该能够干净地加载、维护和访问它,而不必担心它们的回调。

Fragment 的参数可以在其 onAttach 回调中读取和加载,而不是在 onCreate 中,然后 Activity 将(在 onAttach 完成后)获得一个 onAttachFragment 回调,并将 Fragment 作为参数。但是,我怀疑在视图寻呼机中切换已加载页面时会调用 onAttachFragment 。

如果不是,您可以让片段通知 activity(通过接口)它现在在其 onActivityCreated、onViewCreated 或类似方法期间处于活动状态。

但这听起来更像是 activity 应该注册为 ViewPager 本身的页面更改侦听器,并根据页面而不是哪个片段处于活动状态来更新其状态。

附带说明一下,ViewPagerIndicator 现在已经很老了(3 年没有更新),更现代的方法是来自 Google 的 SlidingTabs 示例,它已内置到此处可用的库中: https://github.com/nispok/slidingtabs