2012-12-18 36 views
1

我在活动中有4个选项卡。如何在同一活动的片段之间进行回调

他们每个人都是片段。每个片段都有一个ListView。因此,如果我改变了片段中的ListView,它必须改变所有其他片段中的ListView,即..,Tabs。

我面临的问题是在创建接口实例时。

它需要它自己的onClick()方法。

如果我想回电给父母活动,我可以通过覆盖onAttach来做到这一点。但是如何对片段进行回调?

开发商网站:

通常你会想要一个片段与另一个通信,例如改变基于用户事件的内容。所有片段到片段的通信都是通过关联的活动完成的。两个碎片不应该直接通信。

因此,对Activity进行回调,然后对其他片段进行回调?

谢谢

回答

1

这很简单,你需要的是下面的步骤:

1)从onClick方法在你的第一个片段让活动的一个函数调用:

((IYourActivityInterface) getActivty()).activityMethod(); 

2)在您的活动中,通过标记或ID查找片段并运行它的方法:

public void activityMethod(){ 
    Fragment tabFragment = getFragmentManager().findFragmentByTag("second_fragment"); 
    // or Fragment tabFragment = getFragmentManager().findFragmentById(R.id.frag); 
    if (tabFragment!=null){ 
     ((IFragmentInterface) tabFragment).fragmentMethod(); 
    } 
} 

希望这是你正在寻找的。)

+0

这需要** fragmentMethod()**是静态的。但我不希望它是静态的。此外,如果它的静态,我可以直接从其他片段调用它,而不是去父活动和调用fragmentMethod()。 –

+1

不,它不是。 'findFragmentByTag(...)'用这个TAG返回当前显示片段的一个实例,所以你也可以调用非静态方法。编辑:此模式也足够好,因为'是通过相关的活动完成的# – Evos

+0

或者,您可以而不是findFragmentByTag,创建它时保持对片段的引用。这样,每次你想从活动中调用它,你都不需要'找到'它。 – NickL