0

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

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

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

4

2 回答 2

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);
}
于 2013-05-11T11:04:32.093 回答
0

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

于 2013-05-11T11:07:08.747 回答