LiveDataBus

2021-03-26  本文已影响0人  执念蓝枫

全局共用的消息事件总线,可代替EventBus解决简单的数据传递功能

object LiveDataBus {
    private var bus: MutableMap<String, MutableLiveData<Any>> = mutableMapOf()


    private fun <T> with(key: String, type: Class<T>): MutableLiveData<Any> {

        if (!bus.containsKey(key))
            bus[key] = MutableLiveData()

        return bus[key]!!
    }

    //发送消息
    fun <T> postNewValue(key: String, type: Class<T>, value: Any) {
        this.with(key, type).postValue(value)
    }

    // 消费消息
    fun <T> receiveValue(
        key: String,
        type: Class<T>,
        @NonNull owner: LifecycleOwner,
        @NonNull observer: Observer<in Any>
    ) {
        this.with(key, type).observe(owner, observer)
    }
}

/*
 * 发送新值
 * LiveDataBus.postNewValue("data", String::class.java, "新值")
 */

/*
 * 注册和消费监听
 *LiveDataBus.receiveValue("data", String::class.java, this, object : Observer<Any> {
 *           override fun onChanged(t: Any?) {
 *               binding.showTv.text = t as String
 *           }
 *       })
 */
上一篇 下一篇

猜你喜欢

热点阅读