我是靠谱客的博主 自然皮卡丘,最近开发中收集的这篇文章主要介绍【Android】在Kotlin中更优雅地使用LiveData,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

由于LiveData#Observer接口定义在Java中,且接受一个Nullable参数,导致其不能很好的兼容Kotlin的SAM以及NonNull等语法特性:

  viewModel.order.observe(viewLifecycleOwner, Observe {  
      it?.let { applyCurrentOrder(it) }
  })
  • Observe { .. }不能省略
  • ?.let显得非常多余

现在使用lifecycle-livedata-ktx可以帮我们在Kotlin中更好的使用LiveData:

dependencies {
        def lifecycle_version = "2.1.0" // or higher
        ...
        implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
        ...
    }

然后我们可以在代码中更加优化的observe了:

class MyViewModel: ViewModel() {
  private val _data: MutableLiveData<MyData> = MutableLiveData()
  val order: LiveData<MyData> get() = _data
  ..
  fun updateData(data: MyData) {
    _data.value = data
  }
}
import androidx.lifecycle.observe  //ktx的observe

class MyFragment: Fragment(R.layout.my_fragment) {
  private val viewModel: MyViewModel by viewModels()

  override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    viewModel.order.observe(viewLifecycleOwner) {
        // observe接受lambda,且it为NonNull
        applyData(it)
    }
  }

  fun applyData(order: Order) {
    ..
  }
}

期待未来所有的AAC库都会用Kotlin重写,那时就不需要这些Ktx库做桥接了。

最后

以上就是自然皮卡丘为你收集整理的【Android】在Kotlin中更优雅地使用LiveData的全部内容,希望文章能够帮你解决【Android】在Kotlin中更优雅地使用LiveData所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部