android Livedata最详尽的使用场景分析,让你爱上Livedata

本例实现的 demo 效果是,创建一个全局的倒计时,然后在 Activity 中添加两个按钮,点击后可以切换 FragmentA 和 FragmentB。然后我们通过全局的自定义 LiveData 单例实现数据监听,切换 Fragment 后 Fragment 页面上会展示倒计时的剩余秒数

代码:

  1. 全局自定义 Livedata 代码

class GlobalLivedata : LiveData() {

val coundManager = CountDownManager()

val listener = object : OnDataChangeListener {

override fun change(data: String) {

postValue(data)

}

}

override fun onActive() {

super.onActive()

coundManager.setListener(listener)

}

override fun onInactive() {

super.onInactive()

coundManager.removeListener(listener)

}

companion object {

private lateinit var globalData: GlobalLivedata

fun getInstance(): GlobalLivedata {

globalData = if (::globalData.isInitialized) globalData else GlobalLivedata()

return globalData

}

}

}

复制代码

  1. 倒计时器代码较长只粘贴一部分,有兴趣可以到 github 去查看完整代码

private val listeners = mutableListOf()

init {

val countDown = object : CountDownTimer(2000 * 1000, 1000) {

override fun onTick(millisUntilFinished: Long) {

remainSecond–

callback(“剩余:${remainSecond} 秒”)

}

override fun onFinish() {

callback(“倒计时结束”)

}

}

countDown.start()

}

/**

  • 循环遍历回调消息

*/

private fun callback(msg:String) {

for (listener in listeners){

listener.change(msg)

}

}

复制代码

  1. FragmentA、FragmentB 中监听倒计时状态

GlobalLivedata.getInstance().observe(viewLifecycleOwner,

{ t ->

inflate.findViewById(R.id.tv_fragmentA).text = “fragmenta:${t}”

})

复制代码

GlobalLivedata.getInstance().observe(viewLifecycleOwner,

{ t ->

inflate.findViewById(R.id.tv_fragmentB).text = “fragmentb:${t}”

})

复制代码

  1. 最终效果

最终效果ÿ

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值