2015-08-28 70 views
2

我想实现一些通用的逻辑和反应在我的所有对话的基类中的一些事件。Android的事件总线和基类

在EventBus中注册和取消注册,并在基类中捕获一些事件。

所以,当我试图实例化派生类的实例 - EventBus抛出一个异常,DerivedClass没有像onEvent(*)这样的方法。 我不想在每个派生类中添加一些stub onEvent方法,它不是软件开发应该的方式。

很遗憾,如果没有办法使用这种方法继承。

有人遇到过吗?

回答

1

在注册EvenBus之前,您可以在基类中创建受保护的方法(或抽象类的抽象类),您可以在子类中重写(如果需要)。

try { 
      EventBus.getDefault().register(this); 
     } catch (Throwable t){ 
      t.printStackTrace(); 
     } 

或者你可以等到这个问题是在图书馆 - https://github.com/greenrobot/EventBus/issues/58

+0

相信我能:

public class Test extends Fragment{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if(doIneedEventBus()){ EventBus.getDefault().register(this); } } @Override public void onDestroy() { super.onDestroy(); if(doIneedEventBus()){ EventBus.getDefault().unregister(this); } } protected boolean doIneedEventBus() { return true; } } 

子类:

public class TestChild extends Test { @Override protected boolean doIneedEventBus() { return false; } } 

第二个选项。无论如何,它强制我改变_every_儿童班,并且我有很多。 – TsimoX

+0

如果您使超类抽象和方法抽象化,IDE将至少显示实现该方法所需的所有位置。 –

+0

它是解决方法。并没有解决主要问题 - 你在子类中没有onEvent方法(所有在基类中处理的常见事件),所以建议的代码也会收到异常。 – TsimoX