使用Otto将数据从Activity传递到Fragment

3
在我的应用程序中,我动态地将Fragment添加到主活动视图的容器中。我想知道在使用Otto时添加Fragment时传递数据的最佳方法是什么。目前,我是这样做的,请注意示例中我没有发布我的CustomObject。
在我的主活动中:
    getSupportFragmentManager().beginTransaction()
                    .add(R.id.fragment_container, MY_CUSTOM_FRAGMENT).commit();
    BusProvider.getInstance().post(produceCustomString());

我的碎片内部

    @Subscribe
    public void onCustomStringChanged(String customString) {
    } 
1个回答

12

如果您还有相同类型的@Produce方法注册,则使用@Subscribe注释的方法将自动调用。

最佳方法是在活动上有一个@Produce方法,以通知新片段的数据:

@Produce public String produceCustomString() {
  return "Hello, World!";
}

然后,您所有具有@Subscribe方法的片段:

@Subscribe public void onCustomStringEvent(String event) {
  // ...
}
当您注册具有此方法的片段时,Otto将调用活动上的@Produce方法以获取最新值,并将其传递给片段的方法。

谢谢Jake,这很有帮助。实际上,在我的活动中我已经使用了@Produce,但在添加片段后仍然手动调用post。将删除那个额外的post。 - Mayank Mehta
尝试编辑答案,将“public void String”替换为“public String”,但系统不允许我这样做,显示“编辑必须至少为6个字符” :-) - mingfai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接