EventBus:在没有任何@Subscribe注释方法的情况下注册

时间:2016-08-02 12:13:53

标签: java android greenrobot-eventbus greenrobot-eventbus-3.0

我有一个BaseFragment类,可以注册/注销EventBus中的onStart()/onStop(),以及从中继承的几个子类(FragmentAFragmentB ...)。基类没有任何使用@SubscribeFragmentA注释的方法,但我希望它能够注册以防我将来添加一些。

如果我注册了一个没有任何@Subscribe注释方法的对象,除了使用SquareUp's Otto之外没有任何事情发生,但EventBus会抛出异常:

org.greenrobot.eventbus.EventBusException: Subscriber class com.company.app.FragmentA and its super classes have no public methods with the @Subscribe annotation

为什么抛出异常?我的意思是,它不会阻止应用程序运行。

唯一的解决方案是将register()/unregister()中的BaseFragment电话打包成丑陋的try ... catch还是有更清晰的解决方法?

2 个答案:

答案 0 :(得分:2)

如果您希望您的子片段能够没有@Subscribe方法而不抛出任何异常,只需在基类中放置一个空订阅者:

@Subscribe
public void dummyEvent(SomeClassThatWillNeverBePosted event) {}

答案 1 :(得分:0)

我认为你应该为每个片段分别注册/取消注册。因为如果你在基础片段中执行此操作,则子片段会注册相同的事件,但每个片段都有不同的事件。