android_EventBus入门学习笔记

1、EventBus是什么东西?WHAT

    一种事件的发布和订阅的机制,类似于观察者设计模式,是一种1对多的依赖关系,也就是说多个观察者可以同时监听一个主题对象,当主题对象发生变化时,会通知多个监听该主题对象的观察者。EventBus有事件的发布者和事件的订阅者,同时订阅者也可以是作为发布者,跟观察者模式类似,也是1对多的依赖关系。



2、为什么要使用使用TA,使用的意义在何处?WHY

    EventBus能解决组建间的通讯问题,在实际开发过程中,在某些方面在多个组件间通讯使用广播,接口回调或者handler不太方便,例如...。只要事件发布者发布事件,订阅者事先订阅该事件,就可以在发布者事件发生改变时保证订阅者收到通知。

3、怎么使用EventBus?HOW

我自己入门的一个学习demo,大神勿喷。下面使用一个gif来演示以下demo:

jdfw.gif
大致功能描述:Activity中放置左右两个Fragment,这里没有做颜色的区分,可能不好看出。当点击click1,发布事件,由订阅事件 MessageEvent的ShowFragment# onMessageEvent 去收到通知,然后做出UI的更新,点击click2一样道理,我这里也是使用ShowFragment订阅了该 SomeOtherEvent 因此在 ShowFragment# handleSomethingElse 获取到通知,然后更新UI。
别BB了,开始看看如何使用:
使用步骤如下1,2,3step
  1. Define events:
          
          
    public class MessageEvent {//事件1
    public final String message;
    public MessageEvent(String message) {
    this.message = message;
    }
    }
           
           
    public class SomeOtherEvent {//事件2
    public final String message;
    public SomeOtherEvent(String message) {
    this.message = message;
    }
    }

  2. Prepare subscribers
    Register your subscriber (in your onCreate or in a constructor):eventBus.register(this);
    订阅者代码:ShowFragment.java
          
          
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
    EventBus.getDefault().register(this);//在fragment中注册
    view = View.inflate(getActivity(), R.layout.layout_two, null);
    text = (TextView) view.findViewById(R.id.text);
    return view;
    }
     
    @Override
    public void onDestroyView() {
    super.onDestroyView();
    EventBus.getDefault().unregister(this);//取消注册
    }

    Declare your subscribing method:
    订阅者代码:ShowFragment.java
          
          
    @Subscribe
    public void onMessageEvent(MessageEvent event) {
    text.setText(event.message);
    }
    @Subscribe
    public void handleSomethingElse(SomeOtherEvent event) {
    text.setText(event.message);
    }
    订阅者收到事件通知,会调用这个两个方法。根据事件类型去调用指定事件的方法,方法开头都是on开头,并且需要使用 @Subscribe 注解
  3. Post events:发布事件eventBus.post(event);
    事件发布者代码:ListFragment:
         
         
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
    view = View.inflate(getActivity(), R.layout.layout_one, null);
    Button click1 = (Button) view.findViewById(R.id.click1);
    click1.setOnClickListener(new OnClickListener() {
     
    @Override
    public void onClick(View v) {//点击按钮发布一个事件,订阅了当前事件的订阅者即可收到通知
    EventBus.getDefault().post(new MessageEvent("Hello everyone MessageEvent!"));
    }
    });
    Button click2 = (Button) view.findViewById(R.id.click2);
    click2.setOnClickListener(new OnClickListener() {
     
    @Override
    public void onClick(View v) {
    EventBus.getDefault().post( //点击按钮发布一个事件 ,订阅了当前事件的订阅者即可收到通知
    new SomeOtherEvent("Hello everyone SomeOtherEvent!"));
    }
    });
    return view;
    }
    ListFragment主要是两个按钮,点击不同的按钮发布不同的事件,当点击第一个按钮,即发布 MessageEvent 这个事件,当点击第二个按钮即发布 SomeOtherEvent 这个事件。然后在ShowFragment中展示。
    jar包下载地址 
    demo下载地址
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值