教你打造一个EvenBus 通用的model让你的代码更加简洁

众所周知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事件。让代码更加的简洁直观


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值