EventBus 3.0 封装

封装思路

  • 封装一个EventBus工具类,消息类MessageEvent
  • 在BaseActivity中选择注册及接收消息,默认不注册
  • 子Activity继承BaseActivity,如需接收消息,则重写父类的方法,返回true
  • 在需要发送消息的地方使用工具类发送消息

具体步骤

封装EventBusUtil类

public class EventBusUtil {
    public static void register(Object subscriber) {
        EventBus.getDefault().register(subscriber);
    }

    public static void unregister(Object subscriber) {
        EventBus.getDefault().unregister(subscriber);
    }

    public static void sendEvent(MessageEvent event) {
        EventBus.getDefault().post(event);
    }

    public static void sendStickyEvent(MessageEvent event) {
        EventBus.getDefault().postSticky(event);
    }
}

封装MessageEvent

public class MessageEvent<T> {
    private int code;
    private T data;

    public MessageEvent(int code) {
        this.code = code;
    }

    public MessageEvent(int code, T data) {
        this.code = code;
        this.data = data;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}

其中code对应不同的消息,data为发送的内容

在BaseActivity中选择注册及接收消息,默认不注册

public class BaseActivity extends Activity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (isRegisterEventBus()) {
            EventBusUtil.register(this);
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (isRegisterEventBus()) {
            EventBusUtil.unregister(this);
        }
    }

    /**
     * 是否注册事件分发
     *
     * @return true绑定EventBus事件分发,默认不绑定,子类需要绑定的话复写此方法返回true.
     */
    protected boolean isRegisterEventBus() {
        return false;
    }

    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onEventBusCome(MessageEvent event) {
        if (event != null) {
            receiveEvent(event);
        }
    }

    @Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
    public void onStickyEventBusCome(MessageEvent event) {
        if (event != null) {
            receiveStickyEvent(event);
        }
    }

    /**
     * 接收到分发到事件
     *
     * @param event 事件
     */
    protected void receiveEvent(MessageEvent event) {

    }

    /**
     * 接受到分发的粘性事件
     *
     * @param event 粘性事件
     */
    protected void receiveStickyEvent(MessageEvent event) {

    }
}

子Activity继承BaseActivity

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_ebfirst);
    ButterKnife.bind(this);
}

@OnClick(R.id.button)
public void onViewClicked() {
    EventBusUtil.sendStickyEvent(new MessageEvent<>(MyEventCode.CODE_B, mEditText.getText().toString()));
    startActivity(new Intent(this, SecondActivity.class));
}

@Override
protected boolean isRegisterEventBus() {
    return true;
}

@Override
protected void receiveEvent(MessageEvent event) {
    switch (event.getCode()) {
        case MyEventCode.CODE_A:
            String data = (String) event.getData();
            mTextView.setText(data);
            break;
    }
}

@Override
protected void receiveStickyEvent(MessageEvent event) {
    switch (event.getCode()) {

    }
}
上一篇 Android Splash适配解决启动背景图拉伸问题
下一篇 EventBus 3.0 在页面间跳转接收不到消息解决方法
目录
文章列表
1 Spring Boot 2.0 之优雅停机
Spring Boot 2.0 之优雅停机
2
Confluence不能保存不能编辑问题解决
Confluence不能保存不能编辑问题解决
3
React Native学习之ReactJS组件通信
React Native学习之ReactJS组件通信
4
Swift - 类和结构体的区别
Swift - 类和结构体的区别
5
502错误 Nginx日志 upstream sent too big header while reading response header from upstream
502错误 Nginx日志 upstream sent too big header while reading response header from upstream
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。