3

我有一个BaseFragment将自身注册/注销到EventBusin的onStart()/onStop()类,以及从它继承的几个子类(FragmentAFragmentB...)。基类没有任何用 注释的方法@Subscribe,也FragmentA没有,但我希望它无论如何都要注册,以防我将来添加一些。

如果我注册一个没有任何@Subscribe注释方法的对象,我除了没有任何事情发生,比如使用SquareUp 的 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还是有更清洁的解决方法?

4

2 回答 2

2

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

@Subscribe
public void dummyEvent(SomeClassThatWillNeverBePosted event) {}
于 2016-08-08T15:46:25.923 回答
0

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

于 2016-08-02T12:32:00.800 回答