基於http://developer.android.com/training/basics/fragments/communicating.html的示例,我試圖重現兩個片段(更大片段的子片段)之間的通信。Android中的片段之間的通信
在該示例中,AB活動包含A片段和B片段。但我試圖達到相同的,但在我的情況下AB片段包含A片段和B片段。
問題是AB片段中的重寫方法永遠不會被調用。這是不是工作,因爲包含的組件是一個片段,而不是像在這個例子中的活動?我在這裏錯過了什麼嗎?
基於http://developer.android.com/training/basics/fragments/communicating.html的示例,我試圖重現兩個片段(更大片段的子片段)之間的通信。Android中的片段之間的通信
在該示例中,AB活動包含A片段和B片段。但我試圖達到相同的,但在我的情況下AB片段包含A片段和B片段。
問題是AB片段中的重寫方法永遠不會被調用。這是不是工作,因爲包含的組件是一個片段,而不是像在這個例子中的活動?我在這裏錯過了什麼嗎?
如果您指的是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);
}
您始終可以使用Interface
在片段之間進行通信。這是最安全的方式。
你能否提供你的代碼? – 2013-05-11 10:38:41