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

源码下载

相关推荐
ForteScarlet3 小时前
从 Kotlin 编译器 API 的变化开始: 2.3.20
android·开发语言·后端·ios·开源·kotlin
私人珍藏库3 小时前
[Android] 假装来电 v1.1.0
android·app·工具·软件·多功能
spencer_tseng4 小时前
Android Studio [Gradle JDK]
android·ide·android studio
sun0077004 小时前
wifi热点的防火墙
android
Code-Porter5 小时前
记录关于Flutter ObjectBox数据库使用ObjectBoxBrowser插件,在同一个局域网内电脑无法访问查看数据问题
android·数据库·flutter·dart
KongHen025 小时前
Android Studio最新版汉化教程(2025年10月17日)
android·ide·android studio
键盘鼓手苏苏5 小时前
Flutter for OpenHarmony:使用 typed_data 直击高性能底层数据操作核心
android·flutter·华为·自动化·harmonyos
左手厨刀右手茼蒿5 小时前
Flutter for OpenHarmony:mailer — 基于 SMTP 的极速邮件投递服务(适配鸿蒙 HarmonyOS Next ohos)
android·flutter·华为·交互·harmonyos
取码网6 小时前
getapp影视APP源码 反编译APP附教程
android·php