首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android 数据绑定库 — 从可观察域到 LiveData 仅需两步

你可以用它绑定数据UI 元素,以便在数据更改时,相关元素在屏幕更新。...默认情况下,普通基元和字符串是不可被观察,因此如果在数据绑定布局中使用它们,则在创建绑定时将使用它们值,但对它们后续更改会被忽略。...为了使对象可被观察,我们数据绑定库中包含了一系列可被观察类:ObservableBoolean、ObservableInt、ObservableDouble 和范型:ObservableField<...第一步:使用 LiveData 代替可观察域 如果你直接在数据绑定布局中使用可观察域,只需使用 LiveData 替换 ObservableSomething(或 ObservableField...现在你可以使用带有 Transformations 和 MediatorLiveData LiveData 对象

12810

Android 数据绑定库 — 从可观察域到 LiveData 仅需两步

数据绑定最重要特性之一是可观察性。你可以用它绑定数据UI 元素,以便在数据更改时,相关元素在屏幕更新。...默认情况下,普通基元和字符串是不可被观察,因此如果在数据绑定布局中使用它们,则在创建绑定时将使用它们值,但对它们后续更改会被忽略。...为了使对象可被观察,我们数据绑定库中包含了一系列可被观察类:ObservableBoolean、ObservableInt、ObservableDouble 和范型:ObservableField<...几年后,作为第一波架构组件一部分,我们发布了 LiveData,这又是一个可被观察。这是与数据绑定兼容候选,因此我们添加了此功能。...第一步:使用 LiveData 代替可观察域 如果你直接在数据绑定布局中使用可观察域,只需使用 LiveData 替换 ObservableSomething(或 ObservableField

1.1K30
您找到你想要的搜索结果了吗?
是的
没有找到

解决android viewmodel 数据刷新异常问题

3年wpf开发经验,自认为对数据驱动UI开发模式使用不是问题,但当开始研究androidmvvm模式开发时,发现两年多android开发经验已经将之前wpf开发忘得7788了。.../*更改绑定数据*/ model.addContacts(list); 以上是错误简写代码,让我百撕不得姐啊!...补充知识:使用Android DataBinding时发现只能显示一次,不能动态更新数据 本文只是记录解决错误过程,可能起不到分享意义。...通过点击事件更新ViewModel中 ObservableField 对象数据,并不会刷新视图。 ?...原因 千辛万苦找到了是因为在项目中使用了 Dagger2 在给三个Fragment注入 Activity ViewModel 时,实际是注入了三个 ViewModel 对象 导致每个Fragment

1.3K21

两步使用 LiveData 替换 Observable Field

可观察性是数据绑定库 (Data Binding) 重要特性之一,它可以将数据UI 元素绑定在一起——当数据发生变化时,屏幕相关元素也会随之更新。...默认情况下,普通函数和字符串是不可观察,这就意味着,当您在数据绑定布局中需要使用它们时,只能在新建时候获取它们值,但在后续操作中,却不能得到相应数据。...为了使对象可观察,数据绑定库中包含了一系列可观察类,如: ObservableBoolean、ObservableInt、ObservableDouble… 和一些通用类、ObservableField...视图绑定类中包含一个 setLifecycleOwner 方法,想要从数据绑定布局观察 LiveData ,必须使用该方法。...现在,LiveData 对象可以与 Transformations 或 MediatorLiveData 配合使用,完成数据转换。

91120

Jetpack组件之DataBinding

DataBinding为我们生成数据绑定需要各种类,其中包含了大量静态方法,这些静态方法都有@BindingAdapter注解,在注解中别名对应UI控件在布局文件中属性。...UI控件各个属性绑定了相应代码逻辑,如果在UI控件中属性使用了布局表达式,那么当布局文件渲染时,绑定静态方法自动被调用。...之前都是使用单向绑定来传递数据,对于一些与用户产生交互控件,随着字段变化能更新控件内容,用户交互时也可以自动得到更新。...这就是双向绑定使用 项目开发中登录页面必不可少,我们希望用户名字段内容变化时,EditText自动更新,当用户修改EditText内容时,用户名字段同步得到更改。...DataBinding提供了ObservableField,它能将普通对象包装成一个可观察对象ObservableField可以包装各种基本类型、集合数组类型及自定义类型数据

1.2K20

JetPack--DataBinding

MVP和MVVM中,ViewModel与Presenter很类似,只不过ViewModel和View层多了双向绑定,当ViewModel中数据更改,View层能够知道,反之,View层数据改变,ViewModel...ViewModel中LiveData可以被观测,进而在Activity中观测到值发生变化来更新ui,结合DataBinding,我们可以直接在xml中设置ViewModel,进一步简化逻辑,使我们MVVM...构架更加低耦合 一、初识DataBinding DataBinding是一个可以将xml转换为对象工具,我们知道对象属性是可以赋值,所以我们可以直接只用变量来赋值xml属性,使得它更据灵活性...BindingAdapter 虽然我们可以在xml调用函数,但只能针对一些简单逻辑,如果需要加载网络图片,并实现更复杂逻辑代码,那么使用BindingAdapter是实现它们好工具,它支持我们自定义一个属性...DataBinding支持双向绑定,前面我们实现了单向绑定,当变量值发生变化,那么控件也会更新,双向绑定和单向绑定对比,新增了如果控件中属性值发生变化,那么变量值也会发生变化 1.BaseObservable

1.6K10

MVVM框架实现组件化之整体结构

LiveData是一个抽象类,我们可以存放UI页面需要数据,就是把数据包装在LiveData中了,我们可以观测LiveData中数据变化,但是LiveData是跟UI生命周期关联,当UI页面销毁了...是把View和Model关联起来加工厂: MVVM优势总结: View和Model双向绑定,一方改变都会影响另一方,开发者不用再去手动修改UI数据。...lib_coremodel: 存放MVVM中Model和ViewModel两个模块,就是数据处理和数据UI页面的绑定。依赖lib_opensource库。...最后预告 后面会有一些列介绍在MVVM组件化过程中使用ARouter来跳转Activity和获取Fragment、DataBinding实现数据UI互相绑定、Rxjava2和Retrofit2动态数据获取...private MutableLiveData liveObservableData = new MutableLiveData(); //UI使用可观察数据 ObservableField

1.8K70

两步使用 LiveData 替换 Observable Field

默认情况下,普通函数和字符串是不可观察,这就意味着,当您在数据绑定布局中需要使用它们时,只能在新建时候获取它们值,但在后续操作中,却不能得到相应数据。...为了使对象可观察,数据绑定库中包含了一系列可观察类,如: ObservableBoolean、ObservableInt、ObservableDouble… 和一些通用类、ObservableField...第一步: 用 LiveData 替换 Observable Fields 如果您是直接在数据绑定使用 Observable Fields,只需将 Live ObservableSomething (或...,则无需更改布局,只要用 ViewModel 中 LiveData 替换这些 ObservableFields 即可。...视图绑定类中包含一个 setLifecycleOwner 方法,想要从数据绑定布局观察 LiveData ,必须使用该方法。

10510

Mvvm、RxJava、Retrofit 三剑合璧

,从名字就可以看出,它是连接View和Model桥梁,它会把数据更新ui,也会接受来自ui交互事件,并处理相应业务。...ViewModel和View可以通过DataBinding来实现单向绑定和双向绑定,这套UI数据之间动态监听和动态更新框架Google已经帮我们做好了。...(TextView 换成 EditText)ViewModel 几乎不需要更改任何代码,专注自己数据处理就可以了,如果是MVP遇到UI更改,就可能需要改变获取UI方式,改变更新UI接口,改变从UI...获取输入代码,可能还需要更改访问UI对象属性代码等等。...另外还有一点需要提下,如果一个控件某个属性没有set方法,也是需要用这种方式写。如果是自定义View属性,也是可以用这种方式写

2.6K20

是时候更新手里武器了—Jetpack架构组件简析

View层主要指UI相关,比如xml布局文件,Activity界面显示 ViewModel层是MVVM核心,连接view和model,需要将model数据展示到view,以及view操作数据反映转化到...这里要注意一个点是,双向绑定要考虑到死循环问题,当View被改变,数据对象对应发生更新,同时,这个更新又回通知View层去刷新UI,然后view被改变又会导致数据对象更新,无限循环下去了。...对,前面说数据绑定时候就有一个可观察数据对象ObservableField。那两者有什么区别呢? 1)LiveData 具有生命周期感知能力,可以感知到Activity等生命周期。...当然实际使用起来也确实要方便很多,比如liveData结合,就能在数据查询后进行自动UI更新。 既然Room这么优秀,那就用起来吧。Room接入主要有三大点:DataBase、Entity、Dao。...使用Paging主要注意两个类:PagedList和PagedListAdapter。 1)PagedList 用于加载应用数据块,绑定数据列表,设置数据页等。

2.9K20

如何构建Android MVVM应用程序

(TextView 换成 EditText)ViewModel 几乎不需要更改任何代码,专注自己数据处理就可以了,如果是MVP遇到UI更改,就可能需要改变获取UI方式,改变更新UI接口,改变从UI...获取输入代码,可能还需要更改访问UI对象属性代码等等。...ViewModel就是专注于业务逻辑处理,操作也都是对数据进行操作,这些个数据绑定在相应控件上会自动去更改UI,开发者不需要关心更新UI事情。...这个没有什么好说,但是这边有一个建议: 这些字段是可以稍微做一下分类和包裹,比如说可能一些字段绑定到控件一些Style属性(如果说:长度,颜色,大小)这些根据业务逻辑变化而动态去更改,对于着一类针对...,这些数据自动映射到View层控件属性

1.2K10

Android技术栈(四)Android Jetpack MVVM 完全实践

自定义在xml中可使用View属性,名字空间是不需要,加了反而还会给你警告....//使用requireAll来指定这些属性是全部需要,还是只要一个就可以 //如果requireAll = false,触发适配器绑定时,没有被设置属性将获得该类型默认值 //框架优先使用自定义适配器处理绑定...,就写@={user.name})直接编写并且不支持复杂表达式 2.5.2 兼容LiveData与ObservableField 实际,android:text不只能接受String,当使用双向绑定时...,它也能接受MutableLiveDataObservableField作为赋值对象,这种赋值会将TextViewandroid:text变化绑定到LiveData...(实际MutableLiveData)或者是ObservableField,以便我们在View控制层(Activity/Fragment)更好地观察他们变化.

3.8K01

Android开发MVVM中DataBinding使用

添加实体类 不自动更新 class Student(var name: String, var age: Int) {} 单向绑定 方式1 如果想单向刷新 类继承BaseObservable,在需要更新字段...List 和 Map,分别是 ObservableList 和 ObservableMap 该对象属性会自带set和get方法,调用set方法即可实现页面控件绑定数据自动刷新 public class...UI并没有刷新 要想自动刷新 可以把上面的实体使用ObservableField包一下 class Student(var name: ObservableField(String), var age:...,它将xml布局中界面组件绑定到代码中数据对象, 可以通过对实体字段添@Bindable注解结合notifyPropertyChanged()实现双向绑定,也可以通过对自定义view添加带@BindingAdapter...注解方法来实现自定义属性

13710

如何构建Android MVVM 应用框架

一旦V层某个UI元素更改,那么对应接口就必须得改,数据如何映射到UI、事件监听接口这些都需要转变,牵一发而动全身。如果这一层也能解耦就更好了。...在MVVM中数据是直接绑定UI控件(部分数据是可以直接反映出UI内容),那么我们就可以直接通过修改绑定数据源来间接做一些Android UI测试。...UI接口(但是我们更倾向所有的UI元素都是通过数据来驱动更改UI),View层可以处理事件(但是我们更希望UI事件通过Command来绑定)。...ViewModel就是专注于业务逻辑处理,做事情也都只是对数据操作(这些数据绑定在相应控件上会自动去更改UI)。...Model提供数据获取接口供ViewModel调用,经数据转换和操作并最终映射绑定到View层某个UI元素属性。 如何协作 关于协作,我们先来看下面的一张图: ?

4.4K60

Android Jetpack架构组件(四)之LiveData

UI 组件只需观察相关数据,不需要停止或恢复观察,LiveData 会自动管理这些操作,因为 LiveData 可以感知生命周期状态更改数据始终保持最新状态。...从上述步骤可以看出,LiveData使用了观察者模式,观察者通常是UI控制器,如Activity或Fragment,而被观察者则是LiveData包谷数据对象, 当LiveData对象持有数据发生变化...并且,LiveData 仅在数据发生更改时才发送更新,并且仅发送给活跃观察者,如下所示。...事实,最简单LiveData使用方法是MutableLiveData,如下所示。...("Android应用开发实战"); } } 3.2.3 更新 LiveData 对象 LiveData 本身没有公开可用方法来更新存储数据,如果需要修改LiveData数据,可以使用MutableLiveData

2.7K00

“终于懂了“系列:Jetpack AAC完整解析(四)MVVM - Android架构探索!

View 产生事件,使用 ViewModel进行逻辑处理后,通知Model更新数据,Model把更新数据给ViewModel,ViewModel自动通知View更新界面,而不是主动调用View方法。...应用中其他组件可以使用此存储器监控对象更改,而无需在它们之间创建明确且严格依赖路径。...将 UserListViewModel 中字段类型更改MutableLiveData。现在,更新数据时,系统会通知 UserListActivity。...因此,如果用户在离开页面后再返回,则应用必须重新获取数据,即使数据未发生更改也是如此。这就浪费了宝贵网络资源,迫使用户等待新查询完成。...这样一来,对数据更改将触发对活跃 LiveData 对象回调。数据库会充当单一可信来源。 保留尽可能多相关数据和最新数据。这样,即使用设备处于离线模式,他们也可以使用您应用功能。

1.9K10

使用Lifecycle-Aware组件优化项目

包含以下几个组件模块: lifecycle 处理生命周期,创建一个自动响应生命周期事件用户界面 LiveData 构建底层数据更改时通知试图数据对象数据驱动界面) ViewModel 存储未在应用旋转中销毁...UI相关数据 Room 使用应用内对象和编译时检查来访问您应用SQLite数据库 Paging 逐步从数据源加载所需信息 整体结构如下: ?...对于一些简单数据,Activity可以使用onSaveInstanceState()方法,并从onCreatebundle中重新获取,但这一方法仅仅适合一些简单UI状态,对于列表型这种庞大数据类型并不适合...LiveData优势: 确保数据源跟UI展示一致——当数据源变化时,LiveData会通知观察者更新UI,前提是组件在激活状态下。...当组件处于非激活状态时,不会收到数据更新回调。 无需手动处理生命周期——UI组件只需要观察对应数据,LiveData根据其生命周期自动处理。

89720

Android DataBinding 从入门到进阶,看这一篇就够

前言 DataBinding 是谷歌官方发布一个框架,顾名思义即为数据绑定,是 MVVM 模式在 Android 一种实现,用于降低布局和逻辑耦合性,使代码逻辑更加清晰。...接下来看如何实现自动刷新 UI ** 二、单向数据绑定 实现数据变化自动驱动 UI 刷新方式有三种:BaseObservable、ObservableField、ObservableCollection...BaseObservable 一个纯净 ViewModel 类被更新后,并不会让 UI 自动更新。...price 视图,而 details 视图刷新同时也刷新了 price 视图 实现了 Observable 接口类允许注册一个监听器,当可观察对象属性更改时就会通知这个监听器,此时就需要用到 OnPropertyChangedCallback...(details); } ``` } 对 ObservableGoods 属性改变都会立即触发 UI 刷新,概念与 Observable 区别不大,具体效果可看下面提供源代码

6.1K62

MVVM、RxJava、Retrofit三剑合璧,事半功倍

View和Model桥梁,它会把数据更新ui,也会接受来自ui交互事件,并处理相应业务。...如果是MVP遇到ui更改,就可能需要改变获取控件方式,改变更新ui接口,改变从ui获取输入代码,可能还需要更改访问控件对象属性代码等等,会非常麻烦。...这些成员变量都是ObservableField类型或者ObservableInt类型,泛型包着才是layout需要数据, 为什么要用Observable包一下呢,因为需要自动更新ui。...我们在layout文件中把ViewModel和控件绑定到了一起,当ViewModel数据发生改变(比如:name.set("朱小明");)DataBinding就会自动把新数据更新ui。...另外还有一点需要提下,如果一个控件某个属性没有Set方法,也是需要用这种方式写。如果是自定义View属性,也是可以用这种方式写。 总结 好吧,以上就是本次分享全部。

2.3K40

【Jetpack】ViewModel + LiveData + DataBinding 综合使用 ( 核心要点说明 | 组合方式 | 代码示例 )

, 以更新界面 UI 组件 ; import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel class...ViewModel 中数据发生了变化 , 如何将变化应用到视图组件中 , 在视图中显示最新数据内容 , 此时就用到了 LiveData 组件 ; 在 ViewModel 基础 , 通过 引入 LiveData...androidx.lifecycle.Observer#onChanged 函数 , 在该回调函数中执行 更新视图 操作 ; LiveData 使用核心要点 : 首先 , 在 自定义 ViewModel...观察者 , 如果不设置该项 , LiveData 发生数据改变后 , 则 不会通知 UI 组件进行数据更新 ; Activity 组件继承了 AppCompatActivity , AppCompatActivity...ViewDataBinding 对象 , 向该 ViewDataBinding 对象中设置 ViewModel 对象 , 即可完成数据绑定 实现了 DataBinding + ViewModel 组合使用

1.3K20
领券