注解类BindEventBus.java
/**
* desc:需要使用eventbus的activit和Fragment都需要以注解的方式绑定到此
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public@interfaceBindEventBus {
}
然后在Activity的基类跟Fragment的类中先判断当前子类是否绑定了BindEventBus注解,然后再决定是否进行注册跟反注册
在BaseActivity.java注册EventBus:
privatevoidinitData(){
activity =this;
initBaseMVP();
//判断是否需要注册EventBus
if(this.getClass().isAnnotationPresent(BindEventBus.class)) {
EventBus.getDefault().register(this);
}
}
反注册:
@Override
protectedvoidonDestroy(){
super.onDestroy();
if(this.getClass().isAnnotationPresent(BindEventBus.class)) {
EventBus.getDefault().unregister(this);
}
}
在Fragment中同理:
publicvoidonCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
activity = (BaseActivity) getActivity();
fragment =this;
presenter = TUtil.getT(this,0);
model = TUtil.getT(this,1);
if(thisinstanceofBaseView) {
presenter.setContext(activity);
presenter.setVM(this, model);
}
//判断是否需要注册
if(this.getClass().isAnnotationPresent(BindEventBus.class)) {
EventBus.getDefault().register(this);
}
}
@Override
publicvoidonDestroy(){
super.onDestroy();
if(this.getClass().isAnnotationPresent(BindEventBus.class)) {
EventBus.getDefault().unregister(this);
}
}
在需要使用EventBus的子类中只需加上BindEventBus的注解即可,剩下的使用过程跟正常使用EventBus一样,不需要使用EventBus的子类不用做任何处理
在子类Activity中使用:
@BindEventBus
publicclassReleaseSettingActivityextendsBaseActivity{
在Fragment子类中使用:
@BindEventBus
publicclassThemeStudycircleFragmentextendsMListFragment{}