2

我试图在我所有对话的基类中实现一些常见的逻辑和对某些事件的反应。

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

因此,当我尝试实例化派生类的实例时,EventBus 会抛出一个异常,即 DerivedClass 没有像 onEvent(*) 这样的方法。我不想在每个派生类中添加一些存根 onEvent 方法,这不是软件开发应有的方式。

如果没有办法使用这种关于继承的方法,那真是太可悲了。

有人遇到过吗?

4

2 回答 2

1

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

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;
    }
}

第二种选择:

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

或者您可以等到这个问题在库中得到修复 - https://github.com/greenrobot/EventBus/issues/58

于 2015-08-28T08:35:29.650 回答
0

使用与基类兼容的 rxbus2 库。

https://github.com/warrenth/RxBus2

于 2018-07-17T02:24:13.780 回答