同一类的多个粘性对象?

时间:2015-02-26 11:26:48

标签: android android-intent android-activity greenrobot-eventbus

我在EventBus中使用粘性事件将我的“选定”对象传递到即将发布的Activity中。详细活动允许用户“选择”另一个对象以获取新列表。我想再次将相同对象类的另一个粘性事件发布到另一个列表活动中,但据我所知,之前的粘性将被覆盖。请参见底部的示例说明。

围绕此问题的推荐方法是什么?我需要在EventBus中使用相同的类进行n嵌套的粘性事件。

我非常喜欢使用粘性对象,它不需要手动连接Android Parcelable接口,只需使用Intent机制将对象从一个生活活动发送到另一个生活活动。即使在获得完全正常工作的EventBus之后,我也不想被迫去实现Parcelable,因为我不能拥有嵌套的粘性对象!

我想到的一种方法是在Singleton中的ArrayList中维护我自己的Item对象堆栈,在深度跳跃时(在startActivity之前)推送并在退出时弹出(但在哪里?onDestroy不被使用),但这种方法对我来说似乎非常脆弱。我需要一个强大的机制 - 这是我的应用程序的主要导航枢轴。

  • 项目列表,用户选择Item。我们使用此Item发布了一个粘性事件,并在Intent中发布了带有详细视图类的startActivity。
  • 用户浏览详细信息并询问相关项目列表。我们开始显示列表的另一个活动。
  • 用户选择Item。我们使用此第二 Item发布了一个粘性事件,并在Intent中使用详细视图类发布了startActivity。第二个Item将覆盖第一个Item,当用户想要向后导航时,它不再可用于读取,而是读取创建的最后一个粘性项目。

2 个答案:

答案 0 :(得分:1)

通过查看来源 https://github.com/greenrobot/EventBus/blob/master/EventBus/src/de/greenrobot/event/EventBus.java

第52行:

private final Map<Class<?>, Object> stickyEvents;

它使用课程作为关键,所以我不认为可以做到,但我想到了解决方法。

您在设置数据时可能会执行以下类似操作:

Map<String, List> data = new HashMap<>();
data.put("CLASS_A", objectA);
data.put("CLASS_B", objectB);
EventBus.getDefault().postSticky(scheduleData);

在接收端:

Map<String, List> data = EventBus.getDefault().getStickyEvent(HashMap.class);
objectA = data.get("CLASS_A");
objectB = data.get("CLASS_B");

它类似于意图,但至少代码较少,你将获得速度增益

答案 1 :(得分:0)

  

我真的很喜欢粘性物品,它消除了我的需要   手动连接Android Parcelable接口只是为了发送对象   使用Intent机制从一个生活活动到另一个生活活动。 ID   讨厌被迫去,即使之后也必须实施Parcelable   得到一个完全工作的EventBus只是因为我不能嵌套   粘性物品!

EventBus不能用于Intents和bundle的位置。您应该使用Intent将信息从一个活动发送到另一个活动,并将相关参数放入Bundle中。如果你不是自己编写所有Parcelable和Serializable代码(我完全可以理解),那么看看https://projectlombok.org/它会震撼你的世界。您可以使用单个注释实现parcelable和serializable。