2013-05-11 90 views
0

基於http://developer.android.com/training/basics/fragments/communicating.html的示例,我試圖重現兩個片段(更大片段的子片段)之間的通信。Android中的片段之間的通信

在該示例中,AB活動包含A片段和B片段。但我試圖達到相同的,但在我的情況下AB片段包含A片段和B片段。

問題是AB片段中的重寫方法永遠不會被調用。這是不是工作,因爲包含的組件是一個片段,而不是像在這個例子中的活動?我在這裏錯過了什麼嗎?

+1

你能否提供你的代碼? – 2013-05-11 10:38:41

回答

2

如果您指的是onClick()或其他一些onSomething()句柄,那麼這些句柄總是在Activity類中調用,而不是片段。因此,在您鏈接的示例中,即使您有嵌套的片段,onArticleSelected()也必須保留在Activity中。

要將信息傳遞給片段,您有幾個選項。其一,你可以在活動中保留對片段的引用。如果您的活動重新創建(例如設置事件),這可能會丟失。

第二個也是更好的方法是標記您的片段,然後使用findFragmentByTag

當你把你的片段(注意參數「my_fragment」這是我給了片段標記):

getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, myFragment, "my_fragment").commit(); 

或者當你與另一個替換一個片段:

getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, myFragment, "my_fragment").comit(); 

然後,當您想在您的onArticleSelected活動內的片段中做某件事時:

Fragment fragment = getSupportFragmentManger().findFragmentByTag("my_fragment"); 
if (fragment != null) { 
    fragment.articleSelected(articleId); 
} 
+0

但是,再次(假設onArticleSelected()在活動中)如何從活動與其他嵌套片段進行通信?以我猜想的正確方式實例化片段。我需要通過已經實例化的參考訪問嵌套片段的方法 – Jani 2013-05-12 07:20:43

+0

我現在得到問題。將編輯我的答案。 – tbkn23 2013-05-12 12:09:09

+0

只是爲了記錄,添加接口傳遞的控制和持有的片段引用是它......雖然不知道有多少有效的解決方案,這是考慮到碎片引用的事實involed – Jani 2014-11-04 04:21:32

0

您始終可以使用Interface在片段之間進行通信。這是最安全的方式。