android-fragments - 其他 Activity 中的 OTTO 和 Fragments

标签 android-fragments android-activity otto

我昨天开始使用 OTTO by Square,到目前为止我有一个好的开始。

当您的 Fragment 已经托管在 FragmentActivity 中并且您只需要在该 FragmentActivity 托管的 Fragment 之间进行通信时,Otto 开箱即用的效果很好。

当已经托管时,您的 #onResume() Methode 会被调用,并且 Fragment 可以在 Eventbus 上注册自己:

@Override
public void onResume()
{
    super.onResume();
    BusProvider.getInstance().register(this);
}

我的问题:

嵌入在 中的片段额外 应该通过 Eventbus 接收事件的 Activity 如下所示:
public AnotherFragmentHostedInSomeActivity extends Fragment
{
         .....

    @Subscribe
    public void onSomethingHappend(final Event event)
    {

          final SomeObject deliveredObject = event.getSomeObject();

但是,当您想调用 时,事情似乎仍然很复杂。另一个 Activity 在那里托管这样的代码片段:
public class SomeFragmentSendingDataToAnotherFragment extends Fragment
{
            ...
    private void sendData()
    {
            final Intent intent = new Intent(applicationContext, SomeActivity.class);
            applicationContext.startActivity(intent);                                 
            BusProvider.getInstance().post(new Event(someObject));

正如您可能已经看到的那样,这段代码很狡猾。由于生命周期,启动 Activity 然后将数据发送到该 Activity 托管的 Fragment 无法正常工作。因此, Activity 被创建,片段也被创建。有时会调用 onResume Methode,以便 Fragment 可以使用 @Subscribe 注册自己。但这一切都发生了之后 该事件已通过 EventBus 发布。因此,感兴趣的片段永远不会被 EventBus 调用。

任何人都知道如何以聪明的方式做到这一点?

那里有一些额外的信息:
昨天我和 OTTO 玩得很开心。只有当我需要将数据发送到另一个 Activity 时,问题才会出现在我的项目中,在我的情况下,这种情况总是发生在应用程序在智能手机上运行时,而不是平板电脑上。在我通过 Intent 和 Parcelable 发送所有数据之前。 Otto 会减少编写 Parcleable Objects 的需要,所以我想这样做。

感谢您的回答

最佳答案

当第二个 Activity 开始时,你原来的 Activity 已经消失了。正如其他人所指出的,如果你想将数据从 Activity 传递到 Activity,使用 Intents 可能是最好的途径。

如果你真的想要一个事件总线,你需要一个即使在第一个 Activity 消失后仍然保持 Activity 状态的对象。在 Android 中,这与应用程序上下文相关,或者如果使用 Dagger 或 Guice,则为 @Singleton。

这个单例是使用 Otto 的 @Produce 注释的地方。当第二个 Activity 订阅总线时,它将接收来自该 @Produce 方法的任何数据。

关于android-fragments - 其他 Activity 中的 OTTO 和 Fragments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13267975/

相关文章:

android - 奥托事件总线 : different Event Classes

java - GreenRobot 和 Guava 的 EventBus 使用反射吗?

android - 为什么位置信息没有传递到我的 fragment ?

JAVA - 将 Android 应用程序转换为 fragment 样式应用程序

java - 无法初始化嵌套 Fragment,因为它在旋转上是抽象的

android - 禁用 ActionBarDrawerToggle 抽屉指示器,但保留汉堡包图标

java - 如何避免在 Activity 之间切换时出现白屏

java - Android - 动态设置 Intent 附加功能

android - 想要延迟 1 秒显示数字

android - 事件的 Otto 事件总线运行时订阅