- 首先先写一个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, 有时间再来改动, 当然有大神帮忙改下也可以!