LiveDataBus

全局共用的消息事件总线,可代替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
 *           }
 *       })
 */
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容