众所周知EvenBus是使用对象对象类型来区分所发送的消息并直接把该对象广播出去。
所以我们在建立通用的模式时必须解决区分消息类型的问题,还有如何用同一个模型携带不同的数据。
其实对于解决这个问题非常简单,我们只需要在model中添加一个type字段就行了,如下
private int type; //所要更新的内容
public static final int DEVICES=0; public static final int HEAD=1; public static final int NICKNAME=2; public static final int MESSAGES=3; public static final int FENCE = 4; public static final int ADDRESS = 5; public static final int None = 6;所要区分的类型统一定义在类中,以免在设置或者接受时乱填或者忘记导致代码逻辑处理出错。
好了,处理完区分的问题下面来处理如何用同一个模式携带不同的数据问题。
这个就要巧妙的利用java中的泛型,通过定义一个泛型,去接收不同的信息的携带,这样就能够完美解决同一模型解决不同消息的问题,如下:
public class RefreshModel<T>{ public static final int DEVICES=0; public static final int HEAD=1; public static final int NICKNAME=2; public static final int MESSAGES=3; public static final int FENCE = 4; public static final int ADDRESS = 5; public static final int None = 6; private int type; private T data; //所携带的数据下面提供一个实例
发送:
RefreshModel model=new RefreshModel(); model.setType(RefreshModel.DEVICES); EventBus.getDefault().post(model); }由于此处不许要携带信息,只是通过该消息去刷新列表所以没有携带数据
接收
@Subscribe public void onEventMainThread(RefreshModel event) { if (event.getType() == RefreshModel.DEVICES) { getLeftData(); } else if (event.getType() == RefreshModel.NICKNAME) { leftListViewAdapter.notifyDataSetChanged(); } }这样就避免了在同一个界面注册多个envenbus事件。让代码更加的简洁直观