在Android中的片段之间进行通信

时间:2013-05-11 10:24:27

标签: android interface fragment

基于http://developer.android.com/training/basics/fragments/communicating.html的例子,我试图重现两个片段之间的通信,这两个片段是一个更大片段的子片段。

在该示例中, AB活动包含A片段和B片段。但我试图达到同样的目的,但在我的情况下, AB Fragment 包含一个片段和B片段。

问题是AB Fragment中被覆盖的方法永远不会被调用。这不起作用,因为包含组件是片段而不是示例中的活动吗?我错过了什么吗?

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

您始终可以使用Interface在片段之间进行通信。这是最安全的方式。