【问题标题】:Viewpager pass bundles between fragments片段之间的 Viewpager 传递包
【发布时间】:2012-04-09 19:50:23
【问题描述】:

我有一个自定义 Viewpager,它会在其中禁用触摸事件。所以我有控制viewpager的按钮'Next'和'Back'。我的问题是如何在 viewpager 的片段之间传递数据或包。通常它会起作用,但即使没有显示片段,也会感觉到片段已创建。那是因为 viewpager 的幻灯片效果,它必须使片段在前面和之前的效果才能起作用。这意味着我不能使用包,因为片段已经创建。这就是我想做的事情

片段 1 -> 片段 2 -> 片段 3

片段 1 已创建,片段 2 也已创建。当我按“下一步”时,显示片段 2。当我再次按“下一步”时,我想将一个包传递给 Fragment 3,但 Fragment 3 已经创建,所以它不会工作。

我想到的另一种方法是,当 Viewpager 将其设置为当前 Item 时,在每个 Fragment 中调用一个方法。

【问题讨论】:

  • 数据需要在创建的时候就在那里,还是在显示之前传入就可以了?
  • @dmon 它需要在显示之前出现。就像 Fragment 2 会在我按下“下一步”时正确传递数据,然后会显示 Fragment 3。

标签: android fragment android-viewpager


【解决方案1】:

为什么不创建一个所有片段都实现的接口?这个接口将有两个方法:getParameterData()setParameterData()。在您的 ViewPager 中,当他们按下下一个或上一个时,在当前片段上调用 ​​getParameterData(),然后在要显示的片段上调用 ​​setParameterData()

【讨论】:

  • 哇,我从来没想过,谢谢。还有一件事。我注意到 Fragment 有一个名为 setUserVisibleHint(boolean isVisibleToUser) 的方法。这意味着当片段显示在 UI 上时?当 Viewpager 将其设置为当前 Item 时,调用该方法。
  • 可能,我不确定。您是否尝试过覆盖onResume()
  • 我使用了 onResume() 但是在创建片段时调用它,它不在屏幕上。所以那没有用。 setUserVisibleHint 非常适合我正在尝试做的事情。我只是检查 isVisibleToUser 布尔值以查看它是否在屏幕上可见。
  • 能否请您详细说明一下。我现在很喜欢Java。就像任何类型的例子都会创造奇迹
【解决方案2】:

您可以通过将对象保存在宿主活动中来在片段之间共享/传递您的对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多