开发者

Android开发中用Kotlin编写LiveData组件教程

开发者 https://www.devze.com 2022-12-03 10:18 出处:网络 作者: Hdnw
目录1.简单使用2.map和switchMapLiveData是Jetpack提供的一种响应式编程组件,它可以包含任何类型的数据,并在数据发生变化的时候通知给观察者。也就是说,我们可以将数据使用LiveData来包装,然后在Activity中去观察
目录
  • 1.简单使用
  • 2.map和switchMap

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

1.简单使用

class MainViewModel(countReserved:Int) : ViewModel() {
/*当外部调用counter变量时,实际上获得的就是_counter的实例,但是无法给counter设置数据,从而保证了ViewModel的数据的封装性。*/
   开发者_JAVA教程 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 : AppAIDOSqrgDCompatActivity() {
    …
    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中包含js用户的姓名和年龄

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>{
      valpython lwww.devze.comiveData=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
   }
}

到此这篇关于android开发中用Kotlin编写LiveData组件教程的文章就介绍到这了,更多相关Android LiveData内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以python后多多支持我们!

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号