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

来源:互联网 发布:极点五笔for mac版 编辑:程序博客网 时间:2024/04/20 11:08
  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, 有时间再来改动, 当然有大神帮忙改下也可以!

原创粉丝点击