Android Kotlin版封装EventBus

文章目录

Android Kotlin版封装EventBus

代码封装

添加依赖库

复制代码
implementation("org.greenrobot:eventbus:3.3.1")

定义消息类

kotlin 复制代码
class MessageEvent<T> {
    var code: Int
    var data: T? = null

    constructor(code: Int) {
        this.code = code
    }

    constructor(code: Int, data: T) {
        this.code = code
        this.data = data
    }
}

定义常量值

kotlin 复制代码
object MessageEventCode {
    const val REFRESH = 0xB001 //刷新
    const val DELETE = 0xB002 //删除
    const val ADD = 0xB003 //增加
}

定义注解

kotlin 复制代码
@Target(AnnotationTarget.TYPE, AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
annotation class BindEventBus

定义工具类

kotlin 复制代码
object EventBusUtils {
    /**
     * 注册
     */
    fun register(subscriber: Any) {
        EventBus.getDefault().register(subscriber)
    }

    /**
     * 取消注册
     */
    fun unregister(subscriber: Any) {
        EventBus.getDefault().unregister(subscriber)
    }

    /**
     * 发送普通事件
     */
    fun post(event: MessageEvent<*>) {
        EventBus.getDefault().post(event)
    }

    /**
     * 发送粘性事件
     */
    fun postSticky(event: MessageEvent<*>) {
        EventBus.getDefault().postSticky(event)
    }

    /**
     * 判断是否注册Eventbus
     */
    fun isRegister(clz: Any): Boolean {
        return clz.javaClass.isAnnotationPresent(BindEventBus::class.java)
    }
}

使用

在Activity中

kotlin 复制代码
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_event_bus)
    if (EventBusUtils.isRegister(this)) {
        EventBusUtils.register(this)
    }
}

@Subscribe(threadMode = ThreadMode.MAIN)
fun onMessageEvent(event: MessageEvent<*>) {
    when (event.code) {
        MessageEventCode.REFRESH -> {
            tvMessage.text = "刷新数据"
        }
        MessageEventCode.DELETE -> {
            tvMessage.text = "删除数据"
        }
        MessageEventCode.ADD -> {
            tvMessage.text = "添加数据:${event.data}"
        }
    }
}

override fun onDestroy() {
    super.onDestroy()
    if (EventBusUtils.isRegister(this)) {
        EventBusUtils.unregister(this)
    }
}

在Fragment中

kotlin 复制代码
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    if (EventBusUtils.isRegister(this)) {
        EventBusUtils.register(this)
    }
}

@Subscribe(threadMode = ThreadMode.MAIN)
fun onMessageEvent(event: MessageEvent<*>) {
    when (event.code) {
        MessageEventCode.REFRESH -> {
            tvMessage.text = "刷新数据"
        }
        MessageEventCode.DELETE -> {
            tvMessage.text = "删除数据"
        }
        MessageEventCode.ADD -> {
            tvMessage.text = "添加数据:${event.data}"
        }
    }
}

override fun onDestroyView() {
    super.onDestroyView()
    if (EventBusUtils.isRegister(this)) {
        EventBusUtils.unregister(this)
    }
}

发送事件

kotlin 复制代码
EventBusUtils.post(MessageEvent<Nothing>(MessageEventCode.REFRESH))
kotlin 复制代码
EventBusUtils.post(MessageEvent<Nothing>(MessageEventCode.DELETE))
kotlin 复制代码
EventBusUtils.post(MessageEvent(MessageEventCode.ADD, "hello world"))

源码下载

相关推荐
似霰4 小时前
AIDL Hal 开发笔记7----AIDL HAL 的升级
android·framework·hal
黄大包5 小时前
android MQTT封装
android·mqtt·mt
2501_916007478 小时前
跨平台 App 安全,Flutter、RN、Unity、H5 混合应用加固
android·ios·小程序·https·uni-app·iphone·webview
hinewcc9 小时前
Linux电源管理 - wakelocks
android·linux
你怎么知道我是队长9 小时前
win11系统查看设备配置
android·java·javascript
DevangLic9 小时前
【确认是否安装了 C++ 工具】
android·java·c++
2501_916007479 小时前
不越狱如何查看iOS 应用的详细信息及其文件目录结构
android·macos·ios·小程序·uni-app·cocoa·iphone
龚礼鹏9 小时前
图像显示框架十——BufferQueue的工作流程(基于Android 15源码分析)
android
TheNextByte110 小时前
如何将音乐从Android手机传输到电脑 [4 种方法]
android·智能手机·电脑
一起养小猫10 小时前
Flutter for OpenHarmony 实战:贪吃蛇蛇的移动逻辑详解
android·flutter