Android中EventBus在Java类中的简单使用

添加依赖:

implementation 'org.greenrobot:eventbus:3.1.1'

首先,我是在需要弹出吐司的那个界面,进行注册,

if(!EventBus.getDefault().isRegistered(this)){//加上判断
	EventBus.getDefault().register(this);
}

这个我是在onCreate()方法中进行注册的,其实更好的是在onStart()方法中注册,这里加了一个判断,就是当这个处于未注册的时候,才去进行注册。因为,EventBus必须要注册和取消注册,虽然一般情况下,都会处理好注册和取消注册这两步,但是,加一个判断,可能会更保险一些。然后是,取消注册,

if (EventBus.getDefault().isRegistered(this)){//加上判断
    EventBus.getDefault().unregister(this);
}

同理,这里也是加了一个判断,当他在注册的情况下,才会去取消注册。这个我是在onDestroy()方法中写的,也可以写在onStop()方法中,看自己需求。

定义一个EventMessage类。

public class EventMessage {
    private int type;
    private Object message;

    public EventMessage(int type, Object message) {
        this.type = type;
        this.message = message;
    }

    @Override
    public String toString() {
        return "type="+type+"--message= "+message;
    }

    public int getType() {
        return type;
    }

    public void setType(int type) {
        this.type = type;
    }

    public Object getMessage() {
        return message;
    }

    public void setMessage(Object message) {
        this.message = message;
    }
}

一个用来放类型的类:EventBusDefault。

public class EventBusDefault {
    public static final int OPENSUCCESS = 0;
    public static final int OPENFAILED = 1;
}

这里的OPENSUCCESS和CLOSESUCCESS是自己定义的,两种message的类型,后续会根据类型来判断,做出不同动作。

我这里是收到成功,显示成功,收到失败,显示失败。所以我在收到成功以后,

EventMessage message = new EventMessage(EventBusDefault.OPENSUCCESS, "");
EventBus.getDefault().post(message);

然后,收到失败以后,

EventMessage message = new EventMessage(EventBusDefault.OPENFAILED, "");
EventBus.getDefault().post(message);

这里就是根据我收到的消息不同,然后发布不同的消息给EventBus的订阅者,订阅者根据message的类型来做出不同动作。

然后,需要写出订阅,就是在注册事件和取消注册事件那里,也就是我要展示吐司那里写,

@Subscribe(threadMode = ThreadMode.MAIN)
    public void onReceiveMsg(EventMessage message) {
        switch (message.getType()) {
            case EventBusDefault.CLOSESUCCESS:
                ToastUtil.showTextToast(this,"成功");
                break;
            case EventBusDefault.OPENFAILED:
                ToastUtil.showTextToast(this,"失败");
                break;
        }
    }

基本就是这样,那么我就可以在收到成功消息以后,界面展示成功,收到失败消息以后,界面展示失败。

@Subscribe(threadMode = ThreadMode.MAIN)

这里的ThreadMode有很多类型,可以根据设置这个来修改一些优先级什么的,但是我这里没有使用到,所以不再展开记录,当然,也是自己不熟悉,省得以后再误导自己。

我现在写的这个购物车功能也用到了这个,因为购物车图片是在一个Fragment里,购物车展开的界面是在一个DIalog里边,所以只是单纯的设置数据,并不能够使得购物车图片上的数字实时更新,然后我用了EventBus,就实现了实时更新购物车图片上的数字的效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值