2012-12-18 32 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