EventBus 入门+新写法 再也不用写xxxEvent了和这么多Event类了

  1. 首先先写一个BaseEvent
public interface BaseEvent {


    void setObject(Object obj);

    Object getObject();

    //事件定义
    enum CommonEvent implements BaseEvent {



       /* GO_TO_ALBUMS_PAGE,

        GO_TO_ARTISTS_PAGE,
*/
        UPDATE_PLAYBACK_FG,

        UPDATE_PLAYBACK_BG,

        UPDTAE_PLAYLIST_COUNT;





        private Object obj;

        @Override
        public void setObject(Object obj) {
            this.obj = obj;
        }

        @Override
        public Object getObject() {
            return obj;
        }
    }
    // ... 其他事件定义
}

2 在需要发送事件的地方写上并传送参数

  BaseEvent.CommonEvent.UPDTAE_PLAYLIST_COUNT.setObject( playlists.get(i - 1));
                            EventBus.getDefault().post(BaseEvent.CommonEvent.UPDTAE_PLAYLIST_COUNT);

3 如果在需要注册的activity或者frgament中的onCreate/onCreateView注册

EventBus.getDefault.register(this)

onDestroy /onDEstroyView中注销

EventBus.getDefault.unregister(this)

4在接收事件的地方写上让这个activity或者fragment 操作的方法
传入的都是BastEvent的实现类 CommonEvent event 但是所不同的就要看他是这个event的哪个实例 ,可以用event.equals(BaseEvent.CommonEvent.UPDATE_PLAYBACK_BG) 判断

  @Subscribe
    public void updateTrackCount(BaseEvent.CommonEvent event) {
        if (event.equals(BaseEvent.CommonEvent.UPDTAE_PLAYLIST_COUNT)) {

            if (getAdapter() != null) {

                View view = recyclerView.getChildAt(0);
                if (view != null) {

                    getAdapter().initHeaderFunc(view);
                }

            }


        }


    }

5 需要注意的问题, 由于众所周知枚举在安卓中会导致性能下降,所以不建议用枚举,而用注解限定来替代, 暂时立个flag, 有时间再来改动, 当然有大神帮忙改下也可以!

猜你喜欢

转载自blog.csdn.net/qq_36331942/article/details/77710059