android开发,使用kotlin学习LiveData

LiveData是Jetpack提供的一种响应式编程组件,它可以包含任何类型的数据,并在数据发生变化的时候通知给观察者。也就是说,我们可以将数据使用LiveData来包装,然后在Activity中去观察它,就可以主动将数据变化通知给Activity了。

1.简单使用

class MainViewModel(countReserved:Int) : ViewModel() {
/*当外部调用counter变量时,实际上获得的就是_counter的实例,但是无法给counter设置数据,从而保证了ViewModel的数据的封装性。*/
    val counter:LiveData<Int>
        get()=_counter
    private val _counter = MutableLiveData<Int>()
    init{
        _counter.value=countReserved
    }

    fun plusOne() {
        val count =  _counter.value ?: 0
         _counter.value = count + 1
    }

    fun clear() {
         _counter.value = 0
    }

}
class MainActivity : AppCompatActivity() {
    …
    override fun onCreate(savedInstanceState: Bundle?) {
        …
        plusOneBtn.setOnClickListener {
            viewModel.plusOne()
        }
        clearBtn.setOnClickListener {
            viewModel.clear()
        }
        viewModel.counter.observe(this, Observer { count ->
            infoText.text = count.toString() // 将最新数据更新到界面上
        })
    }
}

 2.map和switchMap

LiveData为了能够应对各种不同的需求场景,提供了两种转换方法:map()和switchMap()方法。

  • map()方法的作用就是将实际包含数据的LiveData和仅用于观察数据的LiveData进行转换。

比如说有一个User类,User中包含用户的姓名和年龄

data class User(var firstName:String,var lastName:String,var age:Int)

 map()方法可以将User类型的LiveData自由地转型成任意其他类型地LiveData。

class MainViewModel(countReserved:Int) : ViewModel() {
   private val userLiveData = MutableLiveData<User>()
   val userName:LiveData<String>=Transformations.map(userLiveData){user->
   "${user.firstName} ${user.lastName}"
   }
}

 

  • 如果ViewModel中的某个LiveData对象时调用另外的方法获取的,那么我们就可以借助switchMap()方法,将这个LiveData对象转换成另一个可观察的LiveData对象。

新建Repository单例类

object Repository{
   fun getUser(userId:String):LiveData<User>{
      val liveData=MutableLiveData<User>()
      liveData.value=User(userId,userId,0)
      return liveData
   }
}
class MainViewModel(countReserved:Int) : ViewModel() {
   private val userLiveData = MutableLiveData<User>()
   val user:LiveData<User>=Transformations.SwitchMap(userIdLiveData){userId->
    Repository.getUser(userId)
   }
   fun getUser(userId:String){
     userIdLiveData.value=userId
   }
}

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Kotlin LiveData 是用于 Android 开发的一个特性,它是一个发布-订阅模式的数据源。LiveData 允许你创建可以被观察(即订阅)的数据对象,从而让你的组件知道数据何时发生变化。这使得数据更新更加透明,并且可以轻松地将数据传递给依赖它的组件。 使用 Kotlin LiveData 的基本步骤如下: 1. 创建一个 LiveData 对象:LiveData 对象是你想要发布的数据的公共视图。你可以将任何可变的、可观察的数据(如变量、属性或对象)封装在 LiveData 对象中。 ```kotlin val liveData = MutableLiveData<Int>() ``` 2. 将数据设置为 LiveData 对象:你可以通过调用 LiveData 对象的 set 方法将数据发布出去。 ```kotlin liveData.value = 42 ``` 3. 将 LiveData 对象传递给依赖它的组件:你可以将 LiveData 对象传递给任何需要它的组件,如 ViewModel 或 Activity/Fragment。这样,当 LiveData 中的数据发生变化时,所有订阅该数据的组件都会收到通知。 4. 使用观察者更新 UI:一旦你订阅了 LiveData 对象,你就可以在 UI 中使用观察者来更新 UI。当数据发生变化时,UI 将自动更新。 LiveData 的优点包括: * 它提供了一种简单的方法来处理数据更新,使得组件之间的通信更加清晰和一致。 * 它允许你将数据传递给任何需要它的组件,而无需手动复制或传递数据。 * 它支持多线程操作,可以在异步操作中安全地更新 LiveData 对象。 需要注意的是,LiveData 是用于在后台线程中维护数据的,并且不能被外部观察者修改。因此,如果你需要修改数据并通知外部观察者,你可能需要使用其他方法,如使用 ViewModel 或其他观察者模式实现。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值