EventBus:所有子 类 接收事件
EventBus: all child classes receive event
我有带 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 两次。
如果您想要针对不同的 object 发送不同的消息,那么您需要创建不同的结构。在您的情况下,您想根据某种逻辑(我不知道)向 object A 发送一条消息,向 object B 发送另一条消息。
我的解决方案是在class A 中创建一个MyEvent,在class B 中创建一个MyEvent(我知道,可能不如parent classes不应该知道 children)。那么你的逻辑将是这样的:
fun somefun() {
if("some condition"){
EventBus.getDefault().post(A.MyEvent("woadude"));
}if("another condition") {
EventBus.getDefault().post(B.MyEvent("woadude"));
}
}
另一种选择就是创建不同的classes MyEventA和MyEventB,并且来自不同classes的每个object可以分别注册到MyEventA和MyEventB。通过这种方式,您 parent class 不需要了解任何有关 children 的信息。
无论您选择什么解决方案,解决方案是您需要发送不同的 object 类型才能使其工作
编辑
根据您需要从 BaseActivity
中删除此功能的新信息
fun onEvent(event: MyEvent) {
//do some cool stuff
}
并使其抽象化。使用 MyEvent 作为您要创建的每个 MyEvent class 的 parent class。所以你将拥有:
我的事件A:我的事件
我的事件B:我的事件
那么在classA中你会得到
fun onEvent(event: MyEventA) {
//do some cool stuff
}
并在 class B
fun onEvent(event: MyEventB) {
//do some cool stuff
}
当然,如果您提供有关该问题的更多信息,我的回答可能会更好。
希望对您有所帮助。
我有带 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 两次。
如果您想要针对不同的 object 发送不同的消息,那么您需要创建不同的结构。在您的情况下,您想根据某种逻辑(我不知道)向 object A 发送一条消息,向 object B 发送另一条消息。
我的解决方案是在class A 中创建一个MyEvent,在class B 中创建一个MyEvent(我知道,可能不如parent classes不应该知道 children)。那么你的逻辑将是这样的:
fun somefun() {
if("some condition"){
EventBus.getDefault().post(A.MyEvent("woadude"));
}if("another condition") {
EventBus.getDefault().post(B.MyEvent("woadude"));
}
}
另一种选择就是创建不同的classes MyEventA和MyEventB,并且来自不同classes的每个object可以分别注册到MyEventA和MyEventB。通过这种方式,您 parent class 不需要了解任何有关 children 的信息。
无论您选择什么解决方案,解决方案是您需要发送不同的 object 类型才能使其工作
编辑 根据您需要从 BaseActivity
中删除此功能的新信息 fun onEvent(event: MyEvent) {
//do some cool stuff
}
并使其抽象化。使用 MyEvent 作为您要创建的每个 MyEvent class 的 parent class。所以你将拥有:
我的事件A:我的事件
我的事件B:我的事件
那么在classA中你会得到
fun onEvent(event: MyEventA) {
//do some cool stuff
}
并在 class B
fun onEvent(event: MyEventB) {
//do some cool stuff
}
当然,如果您提供有关该问题的更多信息,我的回答可能会更好。
希望对您有所帮助。