我在EventBus中使用粘性事件将我的“选定”对象传递到即将发布的Activity中。详细活动允许用户“选择”另一个对象以获取新列表。我想再次将相同对象类的另一个粘性事件发布到另一个列表活动中,但据我所知,之前的粘性将被覆盖。请参见底部的示例说明。
围绕此问题的推荐方法是什么?我需要在EventBus中使用相同的类进行n嵌套的粘性事件。
我非常喜欢使用粘性对象,它不需要手动连接Android Parcelable接口,只需使用Intent
机制将对象从一个生活活动发送到另一个生活活动。即使在获得完全正常工作的EventBus之后,我也不想被迫去实现Parcelable,因为我不能拥有嵌套的粘性对象!
我想到的一种方法是在Singleton中的ArrayList中维护我自己的Item
对象堆栈,在深度跳跃时(在startActivity之前)推送并在退出时弹出(但在哪里?onDestroy
不被使用),但这种方法对我来说似乎非常脆弱。我需要一个强大的机制 - 这是我的应用程序的主要导航枢轴。
Item
。我们使用此Item
发布了一个粘性事件,并在Intent中发布了带有详细视图类的startActivity。Item
。我们使用此第二 Item
发布了一个粘性事件,并在Intent中使用详细视图类发布了startActivity。第二个Item
将覆盖第一个Item
,当用户想要向后导航时,它不再可用于读取,而是读取创建的最后一个粘性项目。答案 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。