我有一个标签式界面,有两个片段(每个标签一个)。一旦我离开其中一个选项卡,我希望将数据输入传递到另一个选项卡。但是,在我的主要活动中使用这些方法似乎有错误:
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
(正确)会返回一个数组。我怎样才能避免这种分裂的延迟?
答案 0 :(得分:2)
在某些情况下,onPause / onResume根本不会被调用。 ViewPager就是一个例子,因为可见页面任一侧的页面都保持活动状态。我不是100%确定这是否适用于标签,因为我已经多年没有使用它们了,但情况可能就是这样。
此处的通信方法并不十分正确,更好的方法是使用侦听器将更改传达给活动,然后让活动将相关更改传递回其他片段。
有关详细信息,请参阅文档中的此页面:http://developer.android.com/training/basics/fragments/communicating.html
答案 1 :(得分:1)
<强> 1.Activity到片段强>
主机活动可以通过使用 findFragmentById()或 findFragmentBy()捕获Fragment实例来向片段传递消息,然后直接调用片段的公共方法。 您的Fragment可以轻松检查父Activity是否实现了此接口,因此Fragment将能够传达其需求,
<强> 2.Fragment到活动强>
要允许Fragment与其Activity进行通信,您可以在Fragment类中定义接口并在Activity中实现它。 Fragment在其onAttach()生命周期方法中捕获接口实现,然后可以调用Interface方法以与Activity通信。
阅读SDK article以获取详细示例