“注册只能找到直接类类型的方法.与Guava事件总线不同,otto不会遍历类层次结构,而是从基类或带注释的接口添加方法”
我理解如果在子类上注册总线,则不会添加基类中的方法.所以我的问题是,我可以在子类中注册一个总线并在基类中注册另一个总线吗?
public class BaseActivity extends Activity ... baseBus.register(this); @Subscribe public voID baseAnswerAvailable(BaseAnswerAvailableEvent event) { // Todo: React to the event somehow in the base class }public class MainActivity extends BaseActivity ... bus.register(this); @Subscribe public voID answerAvailable(AnswerAvailableEvent event) { // Todo: React to the event somehow }
是否会调用baseAnswerAvailable和answerAvailable方法?
解决方法 实际上答案是肯定的,这就是方法https://github.com/square/otto/issues/26#issuecomment-33891598
public class ParentActivity extends Activity {protected Object busEventListener;@OverrIDeprotected voID onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); busEventListener = new Object() { @Subscribe public voID onReceiveLoginEvent(final LoginEvent event) { ParentActivity.this.onReceiveLoginEvent(event); } @Subscribe public voID onReceivelogoutEvent(final logoutEvent event) { ParentActivity.this.onReceivelogoutEvent(event); } }; BusProvIDer.getInstance().register(busEventListener);}//subclasses extend me. This can be abstract,if necessary.protected voID onReceiveLoginEvent(final LoginEvent event) { Log.d("Tag","LoginEvent");}//subclasses extend me. This can be abstract,if necessary.protected voID onReceivelogoutEvent(final logoutEvent event) { Log.d("Tag","logoutEvent");}@OverrIDeprotected voID onDestroy() { super.onDestroy(); BusProvIDer.getInstance().unregister(busEventListener);}}总结
以上是内存溢出为你收集整理的android – 我可以在基础和子类上注册Otto总线吗?全部内容,希望文章能够帮你解决android – 我可以在基础和子类上注册Otto总线吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)