2016-08-02 174 views
1

我有一個BaseFragment類註冊/註銷自己EventBusonStart()/onStop(),和幾個子類繼承它(FragmentAFragmentB ...)。基類沒有任何方法註釋@SubscribeFragmentA都沒有,但我希望它無論如何註冊如果我將來添加一些。EventBus:註冊沒有任何@Subscribe標註的方法

如果我註冊一個對象,沒有任何@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或者是否有更簡潔的解決方法?

+0

您與@Subscribe註釋方法必須是公共,檢查所有這些。 –

+0

@oguzhand如果仔細閱讀,可以看到我沒有使用'@ Subscribe'註釋的方法。 – Flawyte

+1

你可以在基礎片段中實現一個虛擬註釋方法嗎? – lelloman

回答

1

如果你想讓你的孩子片段能夠有沒有@Subscribe方法沒有拋出任何異常,只是把一個空的用戶在基類:

@Subscribe 
public void dummyEvent(SomeClassThatWillNeverBePosted event) {} 
0

我認爲你應該爲每個片段分別註冊/取消註冊。因爲如果您在基本片段中執行此操作,則您的子片段會註冊相同的事件,但每個片段都有不同的事件