Android独立模块中无法正常使用org.greenrobot.eventbus问题求助
问题根因
你在注册EventBus订阅者时传入了mContext(该Context本质是承载这个自定义View的MainActivity实例),但@Subscribe注解的订阅方法是定义在WeekCalender类中的,EventBus只会在你传入的注册对象所属类及其父类中查找带@Subscribe注解的公共方法,因此会抛出MainActivity不存在对应订阅方法的异常。
修复步骤
- 修改订阅者注册/注销逻辑,将注册对象从
mContext改为当前WeekCalender实例this:
@Override protected void onAttachedToWindow() { super.onAttachedToWindow(); if (!EventBus.getDefault().isRegistered(this)) { EventBus.getDefault().register(this); } } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); if (EventBus.getDefault().isRegistered(this)) { EventBus.getDefault().unregister(this); } }
- 确认订阅方法
onDateClicked保持public修饰(你当前代码已满足该要求,EventBus要求订阅方法必须为公共方法)。
修改完成后模块内部的订阅逻辑即可正常运行,无需在主项目的Activity中添加订阅方法。另外你预留的setOnDateClickListener接口已经可以满足主项目获取选中日期的需求,主项目仅需调用该方法设置监听器即可拿到回调结果,无需感知模块内部的EventBus实现。
内容的提问来源于stack exchange,提问作者Sayantan Basu
相关产品推荐
相关产品推荐

