全局共用的消息事件总线,可代替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
* }
* })
*/