通过活动将数据从一个片段传递到另一个片段 - 介于两者之间

时间:2014-02-01 22:20:05

标签: java android

我有一个标签式界面,有两个片段(每个标签一个)。一旦我离开其中一个选项卡,我希望将数据输入传递到另一个选项卡。但是,在我的主要活动中使用这些方法似乎有错误:

public void setAddresses(String[] addr)
{
    addrArray = addr;
}

public String[] getAddressArray()
{
    if(addrArray == null)
    {
      return null;
    }

    //Else return the array
    return addrArray;


}

一个片段通过它的onPause方法使用setAddresses发送数据 所选的新标签/片段是使用它onResume方法检索数据。

然而,这些片段之间似乎存在某种滞后现象。转到新分段getAddressArray时会返回null,但如果我强制它再次调用onResume方法,则getAddressArray(正确)会返回一个数组。我怎样才能避免这种分裂的延迟?

2 个答案:

答案 0 :(得分:2)

在某些情况下,onPause / onResume根本不会被调用。 ViewPager就是一个例子,因为可见页面任一侧的页面都保持活动状态。我不是100%确定这是否适用于标签,因为我已经多年没有使用它们了,但情况可能就是这样。

此处的通信方法并不十分正确,更好的方法是使用侦听器将更改传达给活动,然后让活动将相关更改传递回其他片段。

有关详细信息,请参阅文档中的此页面:http://developer.android.com/training/basics/fragments/communicating.html

答案 1 :(得分:1)

SDK Article

中解释的正确和好的方式

<强> 1.Activity到片段

主机活动可以通过使用 findFragmentById() findFragmentBy()捕获Fragment实例来向片段传递消息,然后直接调用片段的公共方法。 您的Fragment可以轻松检查父Activity是否实现了此接口,因此Fragment将能够传达其需求,

<强> 2.Fragment到活动

要允许Fragment与其Activity进行通信,您可以在Fragment类中定义接口并在Activity中实现它。 Fragment在其onAttach()生命周期方法中捕获接口实现,然后可以调用Interface方法以与Activity通信。

阅读SDK article以获取详细示例