使用注解将EventBus封装抽取到基类

注解类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{}

你可能感兴趣的:(使用注解将EventBus封装抽取到基类)