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"))

源码下载

相关推荐
simplepeng2 小时前
我的天,我真是和androidx的字体加载杠上了
android
小猫猫猫◍˃ᵕ˂◍3 小时前
备忘录模式:快速恢复原始数据
android·java·备忘录模式
CYRUS_STUDIO5 小时前
使用 AndroidNativeEmu 调用 JNI 函数
android·逆向·汇编语言
梦否5 小时前
【Android】类加载器&热修复-随记
android
徒步青云6 小时前
Java内存模型
android
今阳6 小时前
鸿蒙开发笔记-6-装饰器之@Require装饰器,@Reusable装饰器
android·app·harmonyos
-优势在我11 小时前
Android TabLayout 实现随意控制item之间的间距
android·java·ui
hedalei11 小时前
android13修改系统Launcher不跟随重力感应旋转
android·launcher
Indoraptor12 小时前
Android Fence 同步框架
android
峥嵘life12 小时前
DeepSeek本地搭建 和 Android
android