这里引入 LiveData 架构组件 , 在 ViewModel 中 , 可以 通过 LiveData 将数据修改的信息发送给 视图 View , 通知 UI 界面进行修改 ; 场景举例 : 在 ViewModel...视图 View ; 二、LiveData 使用方法 ---- 首先 , 在 ViewModel 视图模型 中定义 LiveData 数据 , 如 MutableLiveData , class MyViewModel...后 , 将数据定义在 LiveData 中 , 然后在 Activity 中 为 LiveData 添加 Observer 监听器 , 当 LiveData 数据发生改变时 , 会自动回调该监听器的...onChange 方法 ; 1、ViewModel + LiveData 代码 自定义 ViewModel 子类继承 ViewModel , 在 ViewModel 中 , 定义 LiveData 类型的数据...显示到 UI 界面中 , 并为该 LiveData 设置 Observer 监听器 , 监听 LiveData 的数据变化 ; 启动 Timer 定时器 , 修改 ViewModel 中的 LiveData
LiveData是一个可被观察的数据持有者类。...与常规的Observable不同,LiveData能意识到应用程序组件的生命周期变化,这意味着它能遵守Activity、Fragment、Service等组件的生命周期 1.优点 (1)确保UI符合数据状态....LiveData遵循观察者模式.当生命周期状态改变时,LiveData会向Observer发出通知去更新UI...LiveData会进行自动管理这些事情,因为在观察时,它会感知到相应组件的生命周期变化。 (4)始终保持最新的数据.如果一个对象的生命周期变到非活跃状态,它将在再次变为活跃状态时接收最新的数据。...2.用法 (1)创建LiveData对象 public class UserModel extends ViewModel { private MutableLiveData name
LiveData 概述 LiveData 是一个可观察数据包装类,与普通观察者不同,LiveData 具备生命周期感知能力,这意味着它遵循其它应用组件的生命周期(Activity、Fragment、Service...LiveData 对象连接到系统服务一次,然后任何需要该资源的观察者都可以只观看 LiveData 对象 使用 LiveData 使用 LiveData 的常规步骤如下,我们按照下面这些步骤写一个简单的例子...与 Room 一起使用 LiveData Room 持久化库支持可观察查询并返回 LiveData 对象,这些查询一般在 DAO 中编写 在更新数据库时,Room 会生成更新 LiveData 对象所需的所有代码...具体可以参考 Android Jetpack - Room 一文所提供的代码示例 转换 LiveData 您可能希望在将 LiveData 对象分派给观察者之前更改存储在 LiveData 对象中的值,...或者您可能需要根据另一个 LiveData对象的值返回不同的 LiveData 实例。
LiveData LiveData是一个与Activity/Fragment生命周期相关(lifecycle-aware)的Observer类。...使用LiveData的好处 保证UI与数据状态同步 LiveData使用Observer模式,只有当Lifecycle的状态改变时候,才会回调给Observer。...LiveData对象一旦连接系统Service,当有Observer需要资源的话,就可以监听LiveData对象了 使用方法 在build.gradle中添加配置 dependencies {...liveData.setValue(new UserData()); liveData.postValue(new UserData()); MutableLiveData与MediatorLiveData...MutableLiveData:可变的LiveData 普通的LiveData将setValue以及postValue的作用于定义成protected,除非继承LiveData否则访问这两个函数。
我们不需要自己去实现观察者模式,LiveData内部已经默认实现好了。 下面我们用LiveData替代上一节定义的接口,完成ViewModel和页面之间的通信。...三.LiveData的基本使用方法 LiveData是一个抽象类,不能直接使用,通常使用的是他的直接子类MutableLiveData。...当我们需要修改LiveData中的数据时,可以通过LiveData.postValue()和LiveData.setValue()方法来完成。...四.LiveData的原理 为了更好地理解LiveData,我们可以深入LiveData.observe()方法的源码一探究竟。...五.LiveData.observeForever()方法 LiveData还提供了一个名为observeForever()的方法,它的用法和observe方法相似,主要的区别在于,当LiveData
theme: condensed-night-purple LiveData 具有生命周期感知能力,观察时会传入对应的LifecycleOwner。...该组件的优势: 确保界面符合数据状态 LiveData 遵循观察者模式。...当观察的数据发生变化时,LiveData 会通知 [Observer]对象,实现被动更新,不需要主动去调用viewmodel获取数据。...如果看源码会发现Observe有一个version版本号,而LiveData也有一个版本号是否调用观察者通知数据变化就是比对这两个版本号是否一致,ViewModel会保存LiveData实例,当重建时LiveData...LiveData 对象连接到系统服务一次,然后需要相应资源的任何观察者只需观察 LiveData 对象。
文章目录 一、RecyclerView 简介 二、RecyclerView 特点 三、RecyclerView 涉及到的类 四、RecyclerView 相关资料 一、RecyclerView 简介 -...布局管理器 , RecyclerView 展示的就是 瀑布流 样式的布局 ; 二、RecyclerView 特点 ---- RecyclerView 特点 : ① 功能强大 : 实现 表格 , 网格...避免了 ListView 中自定义 ViewHolder , 给出了相应的 规范 ; 三、RecyclerView 涉及到的类 ---- RecyclerView 使用必须有的关键类 : RecyclerView.ViewHolder..., RecyclerView.Adapter , LayoutManager ; RecyclerView.ViewHolder 用于 定义 RecyclerView 中每个独立元素的显示的组件 ,...RecyclerView 创建动态列表 : https://developer.android.google.cn/guide/topics/ui/layout/recyclerview 高级 RecyclerView
缺点是,LiveData并没有像Rx那样提供一个用于组合数据流或管理线程的工具包。 如果在一个典型的应用程序的每一层中使用LiveData,看起来就像这样。...val liveData1: LiveData = ... val liveData2: LiveData = ......(liveData1, liveData2) } result.addSource(liveData2) { value -> result.value = combineLatestData...When not to use LiveData 即使你想尝试"反应式",你也需要在到处添加LiveData之前了解其优势。...❞ Antipattern: Sharing instances of LiveData 当一个类将一个LiveData暴露给其他类时,请仔细考虑是否要暴露同一个LiveData实例或不同的实例。
实现思路就是在一个recyclerview的adapter中 在初始化一个recyclerview 的adapter 布局文件 activity_main.xml <ScrollView xmlns...android:layout_below="@+id/image" android:id="@+id/<em>recyclerView</em>" android:layout_width...="match_parent" android:layout_height="wrap_content"> MainActivity.java private RecyclerView recyclerView; private BusinessAdapter...= (RecyclerView) findViewById(R.id.recyclerView); recyclerView.setLayoutManager(new LinearLayoutManager
PageListAdapter通知RecyclerView进行数据的更新。...PagedListAdapter继承于RecyclerView.Adapter,这表明它也是一个RecyclerView.Adapter,并且扩展了RecyclerView.Adapter的支持异步差分更新功能...可配置 RecyclerView 的 Adapters,当用户滚动到加载数据的末尾时自动请求数据。 支持 Kotlin 协程和 Flow, 以及 LiveData 和 RxJava。...ViewModel一般都使用LiveData来跟UI层交互,Flow的扩展函数可以直接转换成一个LiveData可观察对象。...而在MVVM中,我们需要构建ViewModel来实现是LiveData和UI层交互,而ViewModel的Flow的扩展函数可以将直接将PagingSource转换成一个LiveData可观察对象,代码如下
本文目录 RecyclerView概述 RecyclerView使用-基础篇 第一步:添加RecyclerView 第二步:添加布局文件 第三步:添加逻辑代码 运行效果 RecyclerView使用-进阶篇...第三步:逻辑代码 完整代码 RecyclerView概述 RecyclerView是官方在5.0之后新添加的控件,推出用来替代传统的ListView和GridView列表控件。...RecyclerView使用-基础篇 第一步:添加RecyclerView **方法1:**点开任意一个布局文件,找到左边的RecyclerView控件,点击旁边的按钮即可添加RecyclerView。...**方法2:**在build.gradle文件中添加依赖 implementation 'androidx.recyclerview:recyclerview:1.1.0' Jetbrains...; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView
前言 这两天在做一个新的APP,在考虑用户体验上要一个两级的列表嵌套,于就想看看RecyclerView是否能做出这样的效果,自己写了一个DEMO来做一下测试,最后的效果还是比较满意的。...下面我就说一下RecyclerView嵌套RecyclerView的实现。...ItemAdapter的类 public class ItemAdapter extends RecyclerView.Adapter { private...mainAdapter类 我们再来创建mainAdapter的类 public class mainAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder...然后我们通过创建GridLayoutManager把子的RecyclerView改为Grid为两排的布局。 ?
UI PagedList类通过PagedListAdapter加载数据项到RecyclerView里面....只有数据库 要设置RecyclerView观测本地存储, 偏向于使用Room持久化库....用这种方式, 无论任何时候数据库数据插入或者修改, 这些改变会自动地在负责展示这些数据的RecyclerView展示出来....这些实例也提供了在应用中引用的RecyclerView的适配器....数据库例子 使用LiveData观测分页数据 下面的示例代码展示了所有一起工作的碎片.
二、ViewModel+LiveData+Room Room支持返回LiveData类型,结合ViewModel、DataBinding,就可以改造成一个非常棒的MVVM架构 package com.aruba.room...; import androidx.lifecycle.LiveData; import androidx.room.Dao; import androidx.room.Delete; import...; import androidx.recyclerview.widget.RecyclerView; import android.os.Bundle; import com.aruba.room.databinding.ActivityMainBinding...(recyclerViewAdapter); activityMainBinding.recyclerview.setLayoutManager(new LinearLayoutManager...(this, RecyclerView.VERTICAL, false)); } } 效果: 三、升级与填充 1.使用Migration升级数据库 定义Migration,构造时需要低版本号和高版本号
Android lifecycle 使用详解 Android LiveData 使用详解 Android lifecyle 源码解剖 Android livedata 源码解剖 github sample...---- 前言 在前面三篇博客中,我们已经介绍了 lifecycle 的使用及原理,livedata ,ViewModel 的常用用法,今天,让我们一起来学习 livedata 的原理。...我们先来回顾一下 LiveData 的特点: LiveData 是一个可以被观察的数据持有类,它可以感知 Activity、Fragment或Service 等组件的生命周期。...所以会回调 obsever 的 onChange 方法,这也就是 LiveData 设计得比较巧妙的一个地方 同理,当 activity 处于后台的时候,您多次调用 livedata 的 setValue...方法,最终只会回调 livedata observer 的 onChange 方法一次。
} fun getApi(): Api { return instance.create(Api::class.java) } } 2.ViewModel实现 利用LiveData...layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <androidx.recyclerview.widget.RecyclerView...parent" app:layout_constraintTop_toBottomOf="@+id/appCompatEditText"> </androidx.recyclerview.widget.RecyclerView...fragmentArticleBinding.recyclerview.adapter = articleAdapter fragmentArticleBinding.recyclerview.layoutManager...= LinearLayoutManager(requireContext()) //设置LiveData fragmentArticleBinding.lifecycleOwner
本文是介绍 RecyclerView 入门 系列文章 的第二篇。如果您已经对创建 RecyclerView 有了一定的认识,请继续阅读本文。如果尚未熟悉,建议您首先阅读本系列中的 第一篇文章。...RecyclerView 可以很高效地显示列表数据。对于静态的列表数据,默认的 adapter 足矣。然而,在多数情况下,RecyclerView 的数据是动态变化的。...(oldItem: Flower, newItem: Flower): Boolean { return oldItem == newItem } } 将 Adapter 的父类由 RecyclerView.Adapter...仅需几步简单操作就可以在您的 RecyclerView 中使用 ListAdapter。现在您的应用可以通过使用 ListAdapter 来更新那些发生变化的元素以获得更好的性能和用户体验了。...感谢阅读 RecyclerView 系列 的第二篇文章。请继续关注未来更多关于 RecyclerView 的内容。 如果您想了解更多关于 ListAdapter 的内容,请参考 官方文档。
Using LiveData for events 这种方法是在LiveData对象中直接保存一个Snackbar消息或导航的标志量。...它是一个LiveData,但只发送一次更新。...确保你的用户界面与你的数据状态相匹配:LiveData遵循观察者模式,当生命周期状态改变时,LiveData会通知观察者对象。你可以整合你的代码来更新这些观察者对象中的UI。...LiveData对象与系统服务连接一次,然后任何需要该资源的观察者就可以观察LiveData对象。欲了解更多信息,请参见扩展LiveData。...,而且在实例化LiveData的时候也没有办法禁用它们。
你可以使用LiveData来实现这一点。...Receiving multiple values with LiveData 我在《LiveData beyond the ViewModel》(2018)中谈到了这个话题,在那里我谈到了,LiveData...因此,我们可以从数据源和存储库中暴露Flow,而不是LiveData,但ViewModel仍然暴露LiveData,因为它是生命周期感知的。...LiveData: Emit N values as LiveData val currentWeather: LiveData = dataSource.fetchWeather()...但它们并不能在所有地方取代LiveData。
在平时使用RecyclerView时,下拉刷新时先更新数据然后调用Adapter.notifyDataSetChanged全量更新,修改条目时则先更新数据,然后调用Adapter.notifyItemXXX...paging_version" 创建一个ViewModel //PagingViewModel.java private UserDao mUserDao; //dao对象用来从数据库中获取数据 private LiveData...> mLiveData; //可观察的数据源 public LiveData> getLiveData() { if (null...首先来到LivePagedListBuilder.build(), //LivePagedListBuilder.java LiveData> build() {...mDataSourceFactory, ArchTaskExecutor.getMainThreadExecutor(), mFetchExecutor); } LiveData
领取专属 10元无门槛券
手把手带您无忧上云