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

Android Paging库使用详解(小结)

分页包支持多样的应用架构, 包括脱机数据库和与后台服务通讯的数据库. UI PagedList类通过PagedListAdapter加载数据到RecyclerView里面....使用列表而非分页加载的数据 如果你使用内存里的列表作为UI适配器的后备数据结构, 考虑使用PagedList类观测数据更新, 如果列表中数据变得很多的话....这意味着, 尽管内容能够被加载到PagedList实例中, 但已加载一旦加载完成便不能发生改变....当的页加载时, scrollbar并不会跳动, 因为列表是并不没有改变它的size. 不需要”正在加载”旋转指针. 因为列表大小已知, 没必要提醒用户有更多的数据正在加载....在添加占位符的支持之前, 请牢记以下先置条件: 要求集合中数据可数. 来自Room持久化库的DataSource实例能够高效地计算数据.

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

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

也许你还没有使用这个的武器,那么我真的建议你去使用一下,感受下这个新武器的快准狠,感受下这个架构的精妙解耦。...“LiveData 是一种可观察的数据存储类。...这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。 ” LiveData 是一种可观察的数据存储类。等等,这个介绍好像似曾相识?...}) } } 这是一个股票数据对象,StockManager为股票管理,如果该对象有活跃观察者时,就去监听股票市场的情况,如果没有活跃观察者时...当Fragment这个观察者生命周期发生变化时,LiveData就会移除这个观察者,不再发送消息,所以也就避免崩溃问题。

2.9K20

实战 | 使用 Kotlin Flow 构建数据流 管道

某个示例应用界面的 "数据流动" 如下图所示,身份认证管理会告诉数据库用户已登录,而数据库又必须告诉远程数据源来加载一组不同的数据;与此同时这些操作在获取数据时都会告诉视图显示一个转圈的加载图标。...在示例代码中,我们首先从 API 获取消息,然后使用 emit 挂起函数将结果添加到 Flow 中,这将挂起协程直到收集接收到数据,最后我们将协程挂起一段时间。...在 Flow 中,操作会在同一个协程中顺序执行,使用 while(true) 循环可以让 Flow 持续获取新消息直到观察者停止收集数据。传递给数据流构建的挂起代码块通常被称为 "生产者代码块"。...您还可以在 ViewModel 中使用 androidx.lifecycle:lifecycle-livedata-ktx 包里的 Flow.asLiveData(): LiveData 将数据流转换为...LiveData,这样就可以像往常一样使用 LiveData 来实现这件事情。

1.4K10

优先使用 KTX 库 | MAD Skills

由于 -ktx 传递依赖非 ktx 软件包,您不需要添加其他软件包。举个例子,使用 viewmodel 时,您可以看到两个软件包: viewmodel 和 viewmodel-ktx。...if (commit) { editor.commit() } else { editor.apply() } } core-ktx 为处理平台常用的监听提供了更加简单的方式...当您观察一个 LiveData 对象时,您必须实现 Observer 接口。但是使用 lifecycle-ktx 的 observe 函数后,代码会变得更加简洁。...+ // 更新 adapter 中缓存的 words 副本 + words.let { adapter.submitList(it) } + } LiveData 非常适合用于将数据暴露给...: Firebase 创建了一些 通用 Kotlin 扩展; Google Maps 提供了 Maps 和 Places 的 ktx 库; Play Core 有 core-ktx 软件包,为监控应用更新状态提供协程支持

1.1K30

6. Jetpack---Paging你知道怎样上拉加载吗?

分页库支持加载有限以及无限的list,比如一个持续更新的信息源,分页库可以与RecycleView无缝集合,它还可以与LiveData或RxJava集成,观察界面中的数据变化。 ?...ItemKeyedDataSource:如果通过键值请求后端数据;例如我们需要获取在某个特定日期起Github的前100代码提交记录,该日期将成为DataSource的键,ItemKeyedDataSource...3.基本使用 3.1 添加依赖包 implementation "androidx.paging:paging-runtime:$paging_version" // For Kotlin use paging-runtime-ktx...observe(this, Observer { adapter.submitList(it) }) mDataBinding.vm?.refreshState?....,所以我们在这里给它设置一个观察,当数据变动是调用adapter.submitList(it),刷新数据,这个方法是PagedListAdapter中的,里面回去检查数据和旧数据是否相同,也就是上面我们提到的

1.8K40

Android Jetpack架构组件(九)之Paging

PageListAdapter在后台线程对比原来的PageList和的PageList,生成的PageList。 PageListAdapter通知RecyclerView进行数据的更新。...不过,在添加对占位符的支持之前,请注意以下前提条件: 需要可计数的数据集:Room 持久性库 中的 DataSource 实例可以有效地计算的数量。...适配器必须考虑未加载的:为准备列表以应对增长而使用的适配器或呈现机制需要处理 Null 列表项。例如,将数据绑定到 ViewHolder 时,您需要提供默认值来表示未加载数据。...ViewModel一般都使用LiveData来跟UI层交互,Flow的扩展函数可以直接转换成一个LiveData观察对象。...而在MVVM中,我们需要构建ViewModel来实现是LiveData和UI层交互,而ViewModel的Flow的扩展函数可以将直接将PagingSource转换成一个LiveData观察对象,代码如下

3.4K20

优先使用 KTX 库 | MAD Skills

由于 -ktx 传递依赖非 ktx 软件包,您不需要添加其他软件包。举个例子,使用 viewmodel 时,您可以看到两个软件包: viewmodel 和 viewmodel-ktx。...(commit) { editor.commit() } else { editor.apply() } } core-ktx 为处理平台常用的监听提供了更加简单的方式...当您观察一个 LiveData 对象时,您必须实现 Observer 接口。但是使用 lifecycle-ktx 的 observe 函数后,代码会变得更加简洁。...+ // 更新 adapter 中缓存的 words 副本 + words.let { adapter.submitList(it) } + } LiveData 非常适合用于将数据暴露给...的支持: Firebase 创建了一些通用 Kotlin 扩展; Google Maps 提供了 Maps 和 Places 的 ktx 库; Play Core 有 core-ktx 软件包,为监控应用更新状态提供协程支持

1.7K50

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

如果要使用Lifecycle中的注解,你还需要添加如下注解处理,以便在编译时,完成对相应注解的处理。...STARTED,在onStart调用之后,以及onPause调用前会变成此状态 RESUMED,再onResume调用之后会变成此状态 addObserver,此方法可以给LifecycleOwner添加一个观察者...@OnLifecycleEvent注解的方法应该是包访问权限或是public的,否则可能在编译时会报错,或者收不到回调。...一般是它的两个子类MutableLiveData和MediatorLiveData. 4.1 LiveData基本使用 我们可以通过LiveData#observe来观察它所持有的值的变化,还可以通过LiveData...LiveData#onActive会被回调,MediatorLiveData会在内部迭代,用observeForever订阅所有被合并进来的LiveData,这样就能接收所有LiveData的变化,在没有观察者时

3.8K01

使用Lifecycle-Aware组件优化项目

包含以下几个组件模块: lifecycle 处理生命周期,创建一个自动响应生命周期事件的用户界面 LiveData 构建底层数据库更改时通知试图的数据对象(数据驱动界面) ViewModel 存储未在应用旋转中销毁的...UI相关数据 Room 使用应用对象和编译时检查来访问您的应用的SQLite数据库 Paging 逐步从数据源加载所需的信息 整体结构如下: ?...并且当Activity或Fragment重建的时候,ViewModel会自动保留之前的数据并给的Activity或Fragment使用。 ?...ViewModel生命周期 LiveData LiveData 是一个可以保存数据和观察数据变化的组件。...LiveData的优势: 确保数据源跟UI展示一致——当数据源变化时,LiveData会通知观察者更新UI,前提是组件在激活状态下。

89720

安卓开发中的Model-View-Presenter(MVP模式)

正是由于使依赖服务=>视图反转,而且不仅依赖视图=>服务,我们还可以做以下事情: 在运行时视图中添加/删除更多侦听 时使用多个“侦听”的相同视图。...观察前端架构的演变,认为Android正在接近一个类似Redux的架构并不是不合理的。...改进 有许多事情可以改进,例如: ViewModel: 可以在视图和表示之间添加一个额外的层,表示负责保存视图的状态。...此外,这个视图模型可以直接将数据绑定注入到XML中,并使用LiveData将可视化组件绑定到LiveData的可观察对象。...另外,在我们必须处理适配器时,研究如何实现这种绑定也是我们目前正在研究的一个挑战。

1.6K30

(StateFlow & ShareFlow) VS (Flow & LiveData)来看业务适合哪个?

接下来开始看下这几个Flow的特殊之处和应用场景吧~~官方推荐的Flow数据流流向:数据流程数据流包含三个实体:提供方会生成添加到数据流中的数据。得益于协程,数据流还可以异步生成数据。...类似于观察数据,数据更新,使用方接受最新数据是不是和LiveData很像。...确实像,但他比LiveData更强大~~StateFlow线程切换:相比于LiveData更新数据的操作只能在主线程进行,但是Flow可以通过flowOn来在不同的Dispatchers(线程分发,CoruntineContext...: 对于LiveData来说,通过观察调用observe函数的时候传入LifecycleOwner内部注册生命周期回调的方式相比;Flow的观察collect函数需要在协程中调用也就是需要自动管理协程的生命周期...上游数据流会在后台保持活跃状态,并可能会发出新的并耗用资源。需要给定一个初始值。

59440

(StateFlow & ShareFlow) VS (Flow & LiveData

接下来开始看下这几个Flow的特殊之处和应用场景吧~~ 官方推荐的Flow数据流流向: 数据流程 数据流包含三个实体: 提供方会生成添加到数据流中的数据。得益于协程,数据流还可以异步生成数据。...类似于观察数据,数据更新,使用方接受最新数据是不是和LiveData很像。...确实像,但他比LiveData更强大~~ StateFlow 线程切换:相比于LiveData更新数据的操作只能在主线程进行,但是Flow可以通过flowOn来在不同的Dispatchers(线程分发...reply字段决定获取之前的几次数据更新 生命周期处理: 对于LiveData来说,通过观察调用observe函数的时候传入LifecycleOwner内部注册生命周期回调的方式相比;Flow的观察collect...上游数据流会在后台保持活跃状态,并可能会发出新的并耗用资源。 需要给定一个初始值。

97740

Android Jetpack架构组件(四)之LiveData

因此,我们认为LiveData就是一个数据容器,它负责将数据包裹起来,使数据成为被观察者,当数据发生变化时,LiveData会通知观察者以便观察者做出响应。...通常,我们可以在UI控制类中创建该Observer对象,如Activity或Fragment。 通过使用observe()方法将上述的LiveData对象和Observer对象关联在一起。...从上述步骤可以看出,LiveData使用了观察者模式,观察者通常是UI控制,如Activity或Fragment,而被观察者则是LiveData包谷的数据对象, 当LiveData对象持有数据发生变化...对象尚未在 mCurrentName 中设置值,则不会调用 onChanged()。...最后,通过owner.getLifecycle().addObserver()方法将LifecycleBoundObserver添加到Lifecycle中完成注册,这样处理之后LiveData就有了观察组件生命周期变化的能力

2.8K00

LiveData详细分析

需要注意的是,LiveData维护的mVersion表示的是发送信息的版本,每次发送一次信息, 它都会+1, 而ObserverWrapper维护的mLastVersion为订阅触发的版本号, 当订阅动作生效的时候..., 如有的数据变更, 则不会再次通知到观察者。...每个的订阅者,其version都是-1,LiveData一旦设置过其version是大于-1的(每次LiveData设置值都会使其version加1),这样就会导致LiveDataBus每注册一个的订阅者...setValue ——> dispatchingValue(null) ——> considerNotify(注意,这里是个for迭代循环,表示通知所有观察者) ——> onChanged 09.observeForever...看一下源代码 将给定的观察添加观察者列表中,意味着给定的观察者将接收所有事件,并且永远不会被自动删除,不管在什么状态下都能接收到数据的更改通知@MainThread public void observeForever

2.8K00
领券