我有fun onEvent(event: MyEvent)
的BaseActivity和4个扩展BaseActivity的活动。我的问题是BaseActivity处理所有事件。这意味着当发送一个事件时,它会被当前实例化的所有BaseActivity子类接收,这会导致onEvent()多次运行
class BaseActivity {
...
fun onEvent(event: MyEvent) {
//do some cool stuff
}
}
class A: BaseActivity {
}
class B: BaseActivity {
}
class SomeClass {
fun somefun() {
EventBus.getDefault().post(MyEvent("woadude"));
}
}
因此,在这种情况下,BaseActivity中的onEvent为每个子类调用2次。
答案 0 :(得分:3)
如果您需要针对不同对象的不同消息,则需要创建不同的结构。在您的情况下,您希望基于某些逻辑(我不知道)向对象A发送消息并向对象B发送另一条消息。
我的解决方案是在A类中创建一个MyEvent,在B类中创建一个MyEvent(我知道,可能不像父类不应该知道孩子那样好)。那么你的逻辑将是这样的:
fun somefun() {
if("some condition"){
EventBus.getDefault().post(A.MyEvent("woadude"));
}if("another condition") {
EventBus.getDefault().post(B.MyEvent("woadude"));
}
}
另一种选择是创建不同的类MyEventA和MyEventB,来自不同类的每个对象可以分别注册到MyEventA和MyEventB。通过这种方式,您的父类不需要了解有关子项的任何信息。
无论您选择哪种解决方案,解决方案都是您需要发送不同的对象类型才能使其正常工作
EDIT 根据您从BaseActivity
中删除此功能所需的新信息 fun onEvent(event: MyEvent) {
//do some cool stuff
}
并使其抽象化。使用MyEvent作为要创建的每个MyEvent类的父类。所以你将拥有:
MyEventA:MyEvent
MyEventB:MyEvent
然后在A班你将有
fun onEvent(event: MyEventA) {
//do some cool stuff
}
和B组
fun onEvent(event: MyEventB) {
//do some cool stuff
}
当然,如果您提供有关该问题的更多信息,我的答案可能会更好。
希望它有所帮助。