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

目录
  • 1.简单使用
  • 2.map和switchMap

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
   }
}

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

(0)

相关推荐

  • Android Jetpack组件支持库DataBinding与ViewModel与LiveData及Room详解

    目录 一.官方推荐的Jetpack架构 二.添加依赖 三.创建Repository 四.创建ViewModel 五.activity中使用 Android Jetpack之ViewModel.LiveData Android Jetpack之LifeCycle 一.官方推荐的Jetpack架构 ViewModel是介于View(视图)和Model(数据模型)之间的中间层,能够使视图和数据分离,又能提供视图和数据之间的通信. LiveData是一个能够在ViewModel中数据发生变化时通知页面刷

  • Android开发Jetpack组件ViewModel与LiveData使用讲解

    目录 一.ViewModel 1.解决的问题 2.注意点事项 3.ViewModel案例 二.LiveData 1.viewmodel+livedata使用案例 2.viewmodel+livedata Android Jetpack之LifeCycle 一.ViewModel ViewModel是介于View(视图)和Model(数据模型)之间的中间层,能够使视图和数据分离,又能提供视图和数据之间的通信.如图所示: 1.解决的问题 屏幕翻转后页面数据的丢失: 异步调用导致的内存泄露: 类膨胀提

  • Android Jetpack 狠活Lifecycles与LiveData使用详解

    目录 前言 正篇 结语 前言 今天在工作时,测试突然提了一个Bug给我,要求我将APP中某活动页面的UI界面要根据用户在由此页面跳转的下个页面操作,在返回时要实时更新. 在检查代码时,发现我已经对界面可变数据用LiveData去观测,但由于页面变化后并没有重新初始化UI,所以我放在初始化UI的请求根本没有起效,如上图所示例子,在进入下一个页面如若关闭开关,返回时无法及时更新,于是我便想到了安卓科技与狠活Lifecycles,去监听onResume,在resume时用livedata去post数据

  • Android 自定义Livedata使用示例解析

    目录 前言 Livedata分析 自定义Livedata 总结 前言 我们在开发中在使用MVVM的情况下经常会配合livedata来达到快速开发的效果,但是一般都是在activity或者fragment中去使用,我今天想介绍一种自定义的方式,如果你有复杂的自定义View或者某些场景,也可以使用livedata来达到一个很不错的效果. Livedata分析 我们平时使用livedata都会在activity或者fragment中使用,配合 Lifecycle就不用管理生命周期什么的了,所以一般以a

  • Android Jetpack组件库LiveData源码深入探究

    目录 前言 一.LiveData 二.使用案例 三.LiveData 实现原理 四.LiveData 相关源码 五.LiveData分发问题 Android Jetpack之ViewModel.LiveData Android Jetpack之LifeCycle Android Jetpack之DataBinding+ViewModel+LiveData+Room 前言 Jetpack是一个由多个技术库组成的套件,可帮助开发者遵循最佳做法,减少样板代码并编写可在各种Android版本和设备中一致

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

    目录 1.简单使用 2.map和switchMap LiveData是Jetpack提供的一种响应式编程组件,它可以包含任何类型的数据,并在数据发生变化的时候通知给观察者.也就是说,我们可以将数据使用LiveData来包装,然后在Activity中去观察它,就可以主动将数据变化通知给Activity了. 1.简单使用 class MainViewModel(countReserved:Int) : ViewModel() { /*当外部调用counter变量时,实际上获得的就是_counter的

  • Android开发笔记之Intent初级学习教程

    本文讲述了Android开发笔记之Intent初级学习教程.分享给大家供大家参考,具体如下: 项目创建步骤: New Android Project-> Project name:Intent Build Target:Android 2.2 Application name:IntentDemo Package name:com.b510.intent.activity Create Activity:MainActivity Min SDK Version:8 Finish 1.拨打电话 按

  • 使用Android studio查看Kotlin的字节码教程

    Kotlin是一门JVM语言,它被google大力推广,现如今已经是Android官方推荐的开发语言了.为了更好的学习Kotlin,你必须要从字节码的角度来看待语法特点,这样可以更好的加深自己的理解.这篇文章就是教大家如何通过Android studio来查看Kotlin编译后的字节码. 1.首先选中你要显示字节码的文件,之后点击顶部工具栏中的 Tools ->选中 Kotlin ->在弹出菜单中点击 Show Kotlin Bytecode. 2.点击之后在Android studio最右侧

  • Android Jetpack库剖析之LiveData组件篇

    目录 LiveData简介 LiveData用法 数据订阅过程 PostValue过程 SetValue过程 生命周期变化 LiveData简介 在日常安卓开发中,一些耗时的操比如列网络请求,数据库读写都不能在主线程执行,必须开一条子线程去执行这些耗时操作,但我们往往需要在这些耗时操作执行完毕后更新UI,但安卓不能在子线程进行UI的更新,这时我们只能通过创建一个Handler来切回到主线程进行UI的更新,直到LiveData出现,LiveData是一个可被观察的数据容器,它将数据包装起来,使数据

  • Android开发入门环境快速搭建实战教程

    前言 很多朋友都想开始自己的Android开发之旅,但是遇到困难重重.从最开始接触Android开发,从搭建开发环境就花了我大部分时间.所以,作为Android开发第一步,开发环境的搭建,显得基础而重要,下面介绍一种快速搭建Android开发环境的方法,以帮助更多朋友快速上手.话不多说了,来一起看看详细的介绍吧. 方法如下: 在开始之前,我们首先需要了解,当前开发android使用的主流开发平台为eclipse,因此本文讨论的是基于eclipse来做的. 具体需要的各个文件(软件)如下: Ecl

  • Android开发环境安装和配置图文教程

    一.安装JDK.SDK.NDK 无论是用C#和VS2015开发Androd App还是用Java和Eclipse开发Androd App,都需要先安装JDK和Android SDK.把这些安装完毕后,再在开发工具中配置一下安装的路径就行了. 1.安装jdk 下面两个都要安装: jdk-6u45-windows-i586.exe jdk-7u79-windows-i586.exe 到网上找到对应的文件后下载运行即可,Oracle的官网上有,免费下载. 2.安装Android SDK 下载下面的An

  • Android开发SavedState Jetpack状态保存利器

    目录 背景 SavedState的登场 理解SavedState 用法 SavedState组成概念 原理探究 最后 背景 在我们android开发中,如果需要actiivty/fragment等有状态的控件保存当前状态,由系统进行数据保存的恢复的时候 比如正常的暗黑模式切换/后台时低内存系统回收等等,都需要我们对当前的用户数据进行保存,不然下次重新恢复的时候,就会出现丢失数据的情况,给用户造成不太好的体验 一般都会重写onSaveInstanceState方法进行,在里面的Bundle对象进行

  • Android开发Jetpack组件LiveData使用讲解

    目录 LiveData概述 LiveData优势 共享资源 LiveData使用 1 LiveData基本使用 2 Transformations.map() 3 Transformations.switchMap() 4 MediatorLiveData.addSource()合并数据 LiveData概述 LiveData 是一种可观察的数据存储器类: 与常规的可观察类不同,LiveData 具有生命周期感知能力,意指它遵循其他应用组件(如 Activity.Fragment 或 Servi

  • Android开发Jetpack组件DataBinding用例详解

    目录 简介 使用方式 1. build.gradle 中添加 kapt,并启用dataBinding 2.修改布局文件,添加 layout 和 data 标签 3.使用 DataBindingUtil 绑定布局 4.布局的 data 标签中添加数据变量,并使用其参数 5.BindingAdapter的使用 简介 DataBinding 是 Jetpack 组件之一,适用于 MVVM 模式开发,也是Google官方推荐使用的组件之一.使用DataBinding可以很容易的达到视图与逻辑分离,直接在

  • Android开发Jetpack组件Room使用讲解

    目录 简介 Room使用步骤 1 添加依赖 2 创建Entity实体类 3 声明Dao对象 4 声明Database对象 5 获取数据 6 最终使用 简介 Room 是 Google 官方推出的数据库 ORM 框架.ORM 是指 Object Relational Mapping,即对象关系映射,也就是将关系型数据库映射为面向对象的语言.使用 ORM 框架,我们就可以用面向对象的思想操作关系型数据库,不再需要编写 SQL 语句. Room使用步骤 1 添加依赖 build.gradle {app

随机推荐