基于http://developer.android.com/training/basics/fragments/communicating.html的例子,我试图重现两个片段之间的通信,这两个片段是一个更大片段的子片段。
在该示例中, AB活动包含A片段和B片段。但我试图达到同样的目的,但在我的情况下, AB Fragment 包含一个片段和B片段。
问题是AB Fragment中被覆盖的方法永远不会被调用。这不起作用,因为包含组件是片段而不是示例中的活动吗?我错过了什么吗?
答案 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
在片段之间进行通信。这是最安全的方式。