2015-08-28 74 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