什么时候(& where)创建了我的片段

时间:2015-04-23 07:44:10

标签: android viewpagerindicator

我正在使用viewpagerindicator库(http://viewpagerindicator.com/)为我的Android应用程序创建某种向导。它工作正常,完全符合我的要求。

我想"延伸"通过"之前的" /" next"我的ActionBar中的按钮 - 就像在Android" Done Bar"教程 - 逐步完成向导。也像魅力一样。

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

所以,这个信息是我实际想要在我的向导按钮中显示的东西,以便知道接下来是哪个片段,哪个片段是最后一个。

此信息的类型对我的问题并不重要。它可以是一个字符串或一个图标或一个int或......你想要的任何其他东西。

但是,无论我在哪里尝试访问我的片段数据,该片段尚未完全初始化(意味着它的" onCreate"方法尚未被调用)。

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

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

任何帮助,评论,想法都受到高度赞赏。如果需要,我也可以尝试附加一些代码示例以更好地解释我的设置,但我认为应该很容易理解我的问题。

提前致谢!

P.S。:我也试图通过使用EventBus发送" onFragmentInitialized"来自ViewPager中的片段和托管片段的消息。它确实有效,但它似乎不是正确的方法。

2 个答案:

答案 0 :(得分:1)

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

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

但在您的情况下,您的数据应该在使用它的Fragment之外进行初始化,并通过传递数据本身然后显示您想要的任何内容来显示您想要的位置。

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

答案 1 :(得分:1)

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

如果没有,您可以让片段通知活动(通过接口)它在onActivityCreated,onViewCreated或类似方法中现在处于活动状态。

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

作为旁注,ViewPagerIndicator现在已经很老了(3年内还没有更新),更现代的方法是来自Google的SlidingTabs示例,该示例已内置到此处可用的库中:https://github.com/nispok/slidingtabs