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

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

背景 在我的Jetpack_Note系列中,对每一篇的分析都有相对应的代码片段及使用,我把它做成了一个APP,目前功能还不完善,代码我也上传到了GitHub上,参考了官方的Demo以及目前网上的一些文章...简介 2.1 基本介绍 官方定义: 分页库Pagin Library是Jetpack的一部分,它可以妥善的逐步加载数据,帮助您一次加载和显示一部分数据,这样的按需加载可以减少网络贷款和系统资源的使用。...分页库支持加载有限以及无限的list,比如一个持续更新的信息源,分页库可以与RecycleView无缝集合,它还可以与LiveData或RxJava集成,观察界面中的数据变化。 ?...中设置了initialLoad和netWorkState的状态值,同时通过RetrofitApi获取网络数据,并在成功和失败的回调中对数据和网络状态值以及加载初始化做了相关的设置,具体就不介绍了,可看代码...将数据保存到PageList中 将PageList中的数据提交给PageListAdapter PageListAdapter在后台线程中通过Diff对比新老数据,反馈到RecycleView中 RecycleView

1.8K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    LiveData 的正确使用姿势以及反模式

    借助 LiveData 的能力,在 View(Activity 或者 Fragment)和 ViewModel 之间,使用 LiveData 通信,当 LiveData 发生变化的时候,订阅了该 LiveData...:LiveData 非粘性消息的探索和尝试 )可能可以满足需求,但是 LiveData 有自己特定的使用场景,如果非要突破限制去使用的话,会让 LiveData 变得更让人难以理解 此处引用另一篇博客的原文...case 2:有多个监听者并在其中一个 observer 中修改 LiveData 不要在 observer 中修改 LiveData 的值的数据,会影响其他 observer。...2 sample: 收到了 3 复制代码 所以除非特殊场景需要,否则谨慎使用每次都创建新的实例 case 4:错误使用 LifecycleOwner 一种很常见的场景:在 RecycleView 的...使用 LifecycleRegistry 给 ViewHolder 分发生命周期,详见我的另一篇文章: 自定义生命周期以及实现生命周期感知能力 ---- 相关文章 LiveData 非粘性消息的探索和尝试

    1.2K20

    Vue.js 中的片段

    在本文中将会给你介绍一个令人兴奋的概念,它将帮你精通 Vue.js 。 在 Vue 中实现可访问性 为了实现 Web 上的可访问性,你需要设计每个人都可以使用的页面、工具和技术。...开始之前 本文适用于使用 Vue.js 的所有级别的前端开发人员,因此不需要了解初学者的概念和安装过程即可理解这些概念。 在开始之前,这是你应该已经具备的一些先决条件。...Vue 中的 片段 Vue团队尚未完成正式的片段功能,但是 Vue 社区成员 Julien Barbay 构建了一个很棒的插件。 这个插件就像包装器一样。...这是在 Vue 2.x 中使用片段的非常有效的方法 语法如下所示: ...Vue div 总结 在本文中,你学习了如何在 Vue 中使用片段,并了解了为什么在写代码时要考虑可访问性是非常重要的。 Vue 团队已承诺在即将发布的 Vue v3 中引入片段功能。

    2.7K20

    在 SnackBar,Navigation 和其他事件中使用 LiveData(SingleLiveEvent 案例)

    视图层(Activity 或者 Fragment)与 ViewModel 层进行通讯的一种便捷的方式就是使用 LiveData 来进行观察。...使用 LiveData 来解决事件 这种方法来直接的在 LiveData 对象的内部持有 Snackbar 消息或者导航信息。...使用 LiveData 进行事件处理,在观察者中重置事件的初始值 通过这种方法,您可以添加一种方法来从视图中支出您已经处理了该事件,并且重置该事件。...✔️ 推荐: 使用事件包装器 在这种方法中,您可以明确地管理事件是否已经被处理,从而减少错误。...这个方法将事件建模为状态的一部分:他们现在只是一个消耗或者不消耗的消息。 ? 使用事件包装器,您可以将多个观察者添加到一次性事件中。 ---- 总之:把事件设计成你的状态的一部分。

    2.8K41

    LiveData 非粘性消息的探索和尝试

    LiveData 默认是支持粘性消息的(关于什么是粘性消息,请移步我的另一篇文章:LiveData 的正确使用姿势以及反模式 ),如何通过 LiveData 来实现非粘性消息呢,本文将在官博的基础上,...LiveData 值的方法,重置之后,observer 中条件判断为 fasle,因此可以达到不更新 UI 的目的 示例代码 moneyReceivedViewModel.billLiveData.observe...observer 且仅接受 observe() 之后的消息 可参考 基于LiveData实现事件总线思路和方案 LiveData 并不是非用不可 我们使用了各种 workaround 的方式让 LiveData...但是笔者并不推荐使用这样的方式来绕过 LiveData 的限制,去打破 LiveData 原本的设计,这会让 LiveData 变得更让人难以理解 我们并不是非要用 LiveData 不可,LiveData...有适合自己的使用场景(具体可移步:LiveData 的正确使用姿势以及反模式 ),事件总线的场景已经有非常多的优秀开源库可以使用:EventBus、RxBus 等都可以供我们参考。

    98130

    Android Architecture Paging Library详解 | Google IO大会上的最新发布

    作 者 简 介 郭海生 Android高级工程师,6年以上开发经验,有丰富的代码重构和架构设计经验,负责京东商城我的京东的开发工作,热衷于学习和研究新技术。...mBackgroundThreadExecutor:后台线程的Executor。 BoundaryCallback:加载Datasource中的数据加载到边界时的回调。...>>>> PagedListAdapter PagedListAdapter继承于RecycleView.Adapter,用来在RecycleView中显示PagedList 的数据。...当拖动RecycleView加载每一页数据的时候,PagedListAdaptert通过DiffUtil在后台线程计算PagedList细粒度的变化并返回给自己一个新的PagedList,然后调用自己的...可以看出,整个过程Paging内部实现了线程的切换,数据的预加载,所有联动都是在Paging中,使用者只用关心加载数据的具体实现。

    1.5K20

    1049 数列的片段和 (20 分)

    本文链接:https://blog.csdn.net/shiliang97/article/details/100061794 1049 数列的片段和 (20 分) 给定一个正数数列,我们可以从中截取任意的连续的几个数...输入格式: 输入第一行给出一个不超过 10​5​​ 的正整数 N,表示数列中数的个数,第二行给出 N 个不超过 1.0 的正数,是数列中的数,其间以空格分隔。...输出格式: 在一行中输出该序列所有片段包含的数之和,精确到小数点后 2 位。...分析:将数列中的每个数字读取到temp中,假设我们选取的片段中包括temp,且这个片段的首尾指针分别为p和q,那么对于p,有i种选择,即12…i,对于q,有n-i+1种选择,即i, i+1, … n,所以...p和q组合形成的首尾片段有i * (n-i+1)种,因为每个里面都会出现temp,所以temp引起的总和为temp * i * (n – i + 1);遍历完所有数字,将每个temp引起的总和都累加到sum

    47530

    Jetpack源码解析—LiveData的使用及工作原理

    onStart()日志,因为我们将liveData的值和Fragment的生命周期进行了绑定,当返回桌面或者销毁Fragment的时候,LiveData的值会变成相应的生命周期函数,并打印在控制台中:...LiveData中的代码很简洁,400多行的代码,看起来也并不费劲,下面我们来分析下整个流程: 通过使用LiveData对象,为它创建观察者Observer 创建Observer时绑定Fragment生命周期...类,可以帮助我们实现这样的场景: 通过**Transformations.map()**使用一个函数来转换存储在 LiveData对象中的值,并向下传递转换后的值: LiveDataViewModel...Observer会以Source的成员变量的形式,添加到传入的LiveData中。...map()的原理就是基于MediatorLiveData,MediatorLiveData内部会将传递进来的LiveData和Observer封装成内部类,然后放在内部维护的一个Map中。

    1K20

    JavaScript中实用的8个代码片段

    数阶乘 计算数据的阶乘,使用箭头函数和三元运算符。 const factorialOfNumber = number => number < 0 ?...返回数字数组中的最大值 下面我们定义了一个函数,参数一是要传递的数字数组,参数二是要返回的数组长度。当然,对于返回数字数组中的最小值的思路也是一样。...判断数组中的元素是否相同 我们的思路是:将数组中第二个开始的元素逐个与第一个元素相比较,使用===符号比较噢。...举一反三,计算数的和等也是这种思路 const averageOfNumbers = (...numbers) => numbers.reduce((accumulator, currentValue)...注意:上面的代码并非严谨的,没有考虑到边界值等小问题,感兴趣者可自行扩展,封装成util方法,毕竟在实际开发中使用还是可以的~

    39730

    哲思片段 | 设计中的变与不变

    古希腊哲学家巴门尼德认为:“人的思想和言语都有一个载体,如果你在这一时间和另外一个时间想到或者谈到同样一件东西,那就说明这件东西在这段时间内没有变化,如有变化的话,你说的就不是同一件东西。”...与之相对的是值对象。在DDD中,强调将领域对象严格区分为实体和值对象。一个指导原则是,当你无法分辨某个领域对象究竟是实体还是值对象时,应优先将其建模为值对象。这有助于我们更好地利用值对象的不可变性。...例如Java和C#中的String类型,皆为Immutable模式的实现。 可若放在函数式编程中,这种模式就显得有些可笑了。尤其在纯函数式编程的世界里,任何东西都应该是不变的。...这个Identity表达了单一、恒等的概念,例如Int类型中加减法运算半群(SemiGroup)中的Zero,就是一个Identity,因为半群中的任何元素a与Zero结合,依然是元素a本身。...而观中国古代哲学,则有五行学说认为宇宙万物都由金木水火土五种基本特性的运行和变化所构成。 不论构成万物的基本元素为何,这种哲学观不正是函数式编程的设计观吗?

    1.3K70

    前端-JavaScript 有用的代码片段和 trick

    x = 123.4545; x >> 0; // 123 ~~x; // 123 x | 0; // 123 Math.floor(x); // 123 注意:前三种方法只适用于32个位整数,对于负数的处理上和...+$/).test('1'.repeat(n)) } 统计字符串中相同字符出现的次数 var arr = 'abcdaabc'; var info = arr    .split('')    ....> -1) {  // ... } if (~str.indexOf('lo')) {  // ... } parseInt() or Number() 两者的差别之处在于解析和转换两者之间的理解...var a = {}; a + 123; // "[object Object]123" 对于 a+""隐式转换和 String(a)显示转换有一个细微的差别: a+''会对a调用 valueOf()方法...token 2..toString(); // 第二个点号可以正常解析 2 .toString(); // 注意点号前面的空格 (2).toString(); // 2先被计算 对象可计算属性名(仅在ES6中)

    1.1K20
    领券