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

Data Binding 库使用的经验教训

但是要用一句陈词滥调:『能力越大,责任越大』,仅仅是使用数据绑定,并不意味着你可以避免成为一个优秀 UI 开发者。...这里有一个我们为 android:drawable 重新实现了标准 ImageView adapter 的样例: 遗憾的是,视图并不总是能够显示我们需要检查的状态。...由于此功能与 TextView 是完全分开的(我们只是在单击时使用不同的值调用 setMaxLines()),我们需要将引用存储为当前状态。...这是一个展示 Tivi(链接)中类的样例: 你可以看到它仅仅是一个简单的数据类,包含了 UI 需要在一个 TV 秀界面上显示的所有细节 UI 元素。...了解『DB 库』的内部机制可以帮助你提高数据绑定效率,并提高你的 UI 性能。 如果发现译文存在错误或其他需要改进的地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可获得相应奖励积分。

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

    提示 Data Binding 库使用的经验教训

    但是要用一句陈词滥调:『能力越大,责任越大』,仅仅是使用数据绑定,并不意味着你可以避免成为一个优秀 UI 开发者。...这里有一个我们为 android:drawable 重新实现了标准 ImageView adapter 的样例: 遗憾的是,视图并不总是能够显示我们需要检查的状态。...由于此功能与 TextView 是完全分开的(我们只是在单击时使用不同的值调用 setMaxLines()),我们需要将引用存储为当前状态。...这是一个展示 Tivi(链接)中类的样例: 你可以看到它仅仅是一个简单的数据类,包含了 UI 需要在一个 TV 秀界面上显示的所有细节 UI 元素。...了解『DB 库』的内部机制可以帮助你提高数据绑定效率,并提高你的 UI 性能。 如果发现译文存在错误或其他需要改进的地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可获得相应奖励积分。

    69720

    项目需求讨论- 自定义滚轮(第二波新实现)

    因为我们是重复建立数据,比如数据是[A,B,C,D,E,F],你可以做成假循环,比如变为[A,B,C,D,E,F][A,B,C,D,E,F][A,B,C,D,E,F],变为三遍,但是变到上面一组后,因为要重新回到中间...最后感谢黑马飞马同学给的意见。 ? 对啊。我们的RecyclerView 是只会加载界面当前显示的Item,然后不管数量再多,也只是在复用相同的View而已。这样我们上面的问题不就解决了。...因为比如我们建立一千组一万组数据,我不需要考虑要重新滚回中间,问题1和2就解决了。问题3因为RecyclerView 的特性,也被解决了。是一个很理想的循环滚动的滚轮。...因为我们当前获取到该手机界面上显示的第一个的position是1,说明position为0的已经被滑出去了。...这个是可以。但是调用这个方法,在接下去的第二种情况下就出现问题了。 顶部的Item有大于一半ItemHeight的距离滚到了屏幕外面: ?

    1.1K20

    给 Adapter 做 “加法” —— 实战 MergeAdapter

    上面的示例中一个 Adapter 需要负责三套视图布局的呈现,如果是四套,五套,甚至更多呢?从 扩展性 上来说,这个方案也不尽合理。 既然如此,那就让每个 Adapter 只负责一套视图布局。...然而问题是,你的 RecyclerView 可以接受几个 Adapter ?...MergeAdapter 构造函数中的参数顺序,就标识了列表中数据的显示顺序。 第一块布局是 Teacher 。在实际开发中,常常可以用作 Header View 。...如上面的例子所示,MergeAdapter 的数据展示顺序,是按照构造函数中的参数顺序依次排列的,而且同类型的数据总是集中展示的。...在多类型 RecyclerView 中,部分数据需要横向滑动展示,部分数据需要纵向滑动展示,这种情况已经比较常见了。 最后 MergeAdapter 的一些学习资源。

    56820

    使用优化 | RecyclerView中可优化的点

    RecyclerView 核心知识点 1,RecyclerView是什么 为有限的屏幕显示大量的数据且灵活的View,如下图 相比较 ListView ListView: 只有纵向列表一种布局...ViewHolder 的实践:一般情况下我们是在 onBindViewHolder 方法中绑定数据,但是如果是多个条目,那么这种写法就会非常臃肿,这种情况下就可以吧绑定数据的代码写在 ViewHolder...onBindViewHolde 这个方法不是每次都调用的,有可能你看到了item 10 多次,但是只统计了 5,6次。这种情况下数据就是错误的。 如何解决呢?...经过测试,发现适用的场景如下: 在刷新列表的时候,一般情况下的操作是,清空原有的数据,然后填入新的数据,最后not........甚至,可以看到那些数据是重复的: 下面就看一下具体的实现过程 使用 diff class RvDiffItemCallback(val old: List, val new:

    1.5K30

    使用优化 | RecyclerView中可优化的点

    RecyclerView 核心知识点 1,RecyclerView是什么 为有限的屏幕显示大量的数据且灵活的View,如下图 相比较 ListView ListView: 只有纵向列表一种布局...ViewHolder 的实践:一般情况下我们是在 onBindViewHolder 方法中绑定数据,但是如果是多个条目,那么这种写法就会非常臃肿,这种情况下就可以吧绑定数据的代码写在 ViewHolder...onBindViewHolde 这个方法不是每次都调用的,有可能你看到了item 10 多次,但是只统计了 5,6次。这种情况下数据就是错误的。 如何解决呢?...经过测试,发现适用的场景如下: 在刷新列表的时候,一般情况下的操作是,清空原有的数据,然后填入新的数据,最后not........甚至,可以看到那些数据是重复的: 下面就看一下具体的实现过程 使用 diff class RvDiffItemCallback(val old: List, val new:

    1.4K20

    干货 | 深度学习中不均衡数据集的处理

    在大多数情况下,您的数据将具有一定程度的类不平衡,即每个类具有不同数量的样本。 为什么我们希望我们的数据集是平衡数据集?...同时,在我们本该买的时候,模型告诉我们不要买,这并不是什么大事。如果我们错过一栋房子,总会有其他房子可以买,但是在如此巨大的资产上做出错误的投资是非常糟糕的。...但是我们可能对那些少数类并不感兴趣。也许我们的主要目标是获得尽可能高的准确率。在这种情况下,做任何平衡都没有意义,因为我们的大部分准确率都来自于具有更多训练示例的类。...(2)过采样和欠采样 选择合适的类权重有时是很复杂的事情。做简单的反向频率处理并不总是有用的。焦距损失法是有用的,但是即便这样,也还是会减少相同程度地减少每个类里面分类良好的示例的权重。...我们只是在没有获得更多数据的情况下整理了我们的数据集!如果发现很难有效地设置类权重,那么抽样可以替代类平衡。

    1.9K10

    使用 ConcatAdapter 顺序连接其他 Adapter

    ConcatAdapter 是 recyclerview: 1.2.0-alpha 04 中提供的一个新组件,它可以帮我们顺序地组合多个 Adapter,并让它们显示在同一个 RecyclerView...这方面的一个用例,是在列表头部和底部显示加载状态: 当列表从网络中检索数据时,我们想显示一个加载中的图标;如果出现错误,我们要显示错误信息和重试按钮。...△ 一个带有底部的 RecyclerView,底部显示了加载状态: 加载进度或错误信息 ConcatAdapter 简介 ConcatAdapter 让我们可以顺序显示多个 Adapter 中的内容。...△ RecyclerView 和 Adapter 数据 在头部和底部显示加载状态 我们可以在头部或底部显示一个进度条或错误信息。列表成功加载数据后,头部或底部便不应该再显示任何信息。...在显示加载状态的头部和底部的例子中,两种 ViewHolder 事实上使用的是相同的内容,所以我们可以复用它们。

    81420

    干货 | 深度学习中不均衡数据集的处理

    在大多数情况下,您的数据将具有一定程度的类不平衡,即每个类具有不同数量的样本。 为什么我们希望我们的数据集是平衡数据集?...同时,在我们本该买的时候,模型告诉我们不要买,这并不是什么大事。如果我们错过一栋房子,总会有其他房子可以买,但是在如此巨大的资产上做出错误的投资是非常糟糕的。...但是我们可能对那些少数类并不感兴趣。也许我们的主要目标是获得尽可能高的准确率。在这种情况下,做任何平衡都没有意义,因为我们的大部分准确率都来自于具有更多训练示例的类。...(2)过采样和欠采样 选择合适的类权重有时是很复杂的事情。做简单的反向频率处理并不总是有用的。焦距损失法是有用的,但是即便这样,也还是会减少相同程度地减少每个类里面分类良好的示例的权重。...我们只是在没有获得更多数据的情况下整理了我们的数据集!如果发现很难有效地设置类权重,那么抽样可以替代类平衡。 via:George Seif's blog,AI 科技评论编译。

    1K40

    RecyclerView的复用机制

    值得注意的是mAttachedScrap是不限制大小的。想一想也很容易明白,屏幕中显示多少ViewHolder,是无法确定的。...也就是说,只能是RecyclerView的ViewHolder被滑出屏幕后,再滑回来显示的情景。 也不难看出,从mCachedViews中,我们取得的ViewHolder是不需要重新绑定数据的。...mAttachedScrap和mChangedScrap,是缓存的屏幕上的可见内容。它本身的大小是无限的,因为屏幕上显示多少item是无法限制的,这一层缓存并不会带来额外的缓存。...mCachedViews中的缓存是携带了ViewHolder的数据的。也就是说,它只能缓存已经显示过的ViewHolder。...显而易见,它的主要作用是让已经显示过的ViewHolder需要再次显示时,能够快速显示。RecyclerView中,mCachedViews的默认大小为2 。

    1.3K20

    关于RecyclerView你知道的不知道的都在这了(上)前言目录正文

    竖直LinearLayoutManager示例.png 在 Tv 应用中,这种竖直方向的 LinearLayoutManager 使用场景大多都是用于显示菜单项,使用频率并不是特别高,但在手机应用中,这种的使用频率算是特别高的了...其实想想也很容易理解,GridLayoutManager 是继承自 LinearLayoutManager,只是在它基础上补充了 spanCount 概念,滑动的实现还是延用 LinearLayoutManager...如果 RecyclerView 高度不足以让所有行都显示出来,那么就会出现 item 重叠现象。...,也许它并不是处于当前屏的最顶部或最底部,就像上图日志中的 position=7 的 item,它虽然是最后完全可见的 item,但并不是位于最底部,最底部是 6 的 item。...另外一种情况是,手指放开后,RecyclerView 并没有任何滑动了,通常是手指很慢的拖动情况下放开,这时候该方法就会只回调一次,参数传入 SCROLL_STATE_IDLE,因为在手指还没放开前就已经停止滑动了

    3.2K60

    在 View 上使用挂起函数

    虽然用起来很优雅,但我们只是在用另一种方式处理回调,这还是没有解决复杂的 UI 的回调嵌套问题。既然我们在讨论异步操作,那在这种情况下,我们可以使用协程优化这些问题么?...并不是所有的操作都有已取消或出错的状态,但是这些操作有。就像后面 Animator 的示例中那样,我们必须把这些状态传递到协程中,让调用者可以处理错误的状态。...cont.resume() 方法被调用 } 此方法仅支持协程中一个维度的取消 (#1 操作),因为布局操作没有错误状态供我们监听。...单独使用其中某个方法,并不会产生多大的作用,但是如果把它们组合起来,便能发挥巨大的威力。...我们就算不去组合不同类型的回调,也能创建复杂的异步变换,或是将不同类型的动画组合起来。 通过使用与我们应用中数据层相同的协程开发原语,还能使 UI 编程更便捷。

    2.4K30

    这个列表实现很复杂?不存在

    而RecyclerView的视图是通过Adapter来渲染的。原始的Adapter,让人很蛋疼,重复工作太多,我们应该要有封装的思想,把最需要的部分提供出来,其它不用管。...Adapter最火的库我想是BRVAH(http://www.recyclerview.org/)了,怎么个简单法呢?...Tips:全文,甚至库的demo都是以BRVAH为配合对象。 BaseAdapter封装 既然要配合,那么总是要加上无畏的代码量,放心,我都考虑到了。...回归Adapter Helper创建完资源后总是要回归于Adapter,在BaseAdapter封装中,我们已经知道,Helper是如何和Adapter绑定在一起的。...很不幸,我们这里,level跟type是一对多的关系,比如上面说的A,它可能用来显示正常的数据,万一产品说如果数据出错,我们需要有错误页面(错误页面级别是type),那岂不是GG?

    57610

    将studio项目 转换为eclipse项目

    在这里我要强调的是开源代码板块的studio项目95%以上都是我亲自编译成功并且运行了的,而剩下我没有验证的极少部分往往是因为该项目在github上已经得到非常多的star,而编译起来又异常复杂,但这是极少数的情况...在这个时候我并不知道这些错误具体产生的原因,所以我需要查看具体的错误文件,打开项目的包,发现以下java文件有红叉: ? 随便选择一个文件进去看看,这里我就选择第一个好了找到了第一个错误: ?...LayoutState的recyclerState方法找不到,LayoutState不就是上图中的第三个文件么,进去很多错误,随便截个图 ? 显然是需要导入RecyclerView包了。...看到这里你可能会想,是不是麻烦了点,确实,事实上我并不是上面的每一步都按部就班,我一般先在每个错误文件中扫描以便错误的地方,很快就可以定位到RecyclerView,然后添加依赖,甚至我都不想去扫描错误直接添加...RecyclerView的依赖,因为github中已经说了这个项目是RecyclerView实现的。

    1.2K70

    RecyclerView | 在 RecyclerView 中使用 ListAdapter

    本文是介绍 RecyclerView 入门 系列文章 的第二篇。如果您已经对创建 RecyclerView 有了一定的认识,请继续阅读本文。如果尚未熟悉,建议您首先阅读本系列中的 第一篇文章。...RecyclerView 可以很高效地显示列表数据。对于静态的列表数据,默认的 adapter 足矣。然而,在多数情况下,RecyclerView 的数据是动态变化的。...拿备忘工作的应用举例: 主要操作是添加新的工作事项,删除已经完成的工作事项。...而 ListAdapter 可以处理元素的添加和删除而无需重绘视图,甚至可以为变化添加动画效果。 使用 ListAdapter 的另一个好处是: 当添加或删除元素的时候,还可以添加动画。...,该方法提交了一个列表来与当前列表进行对比并显示。

    1.5K20

    实践 | Google IO 应用是如何适配大尺寸屏幕 UI 的?

    应用在大尺寸屏幕 (平板、可折叠设备甚至是 Chrome OS 和台式个人电脑) 上的使用体验是我们的关注点之一: 在过去的一年中,大尺寸屏幕的设备越来越受欢迎,用户使用率也越来越高,如今已增长到 2.5...这种布局方式带来的一个特别的挑战是,同一台设备在不同的配置下可能有不同的最佳显示方式,比如平板电脑竖屏对比横屏显示就有差异。...我们的替代方案是让会议列表和双窗格 Fragment 共享同一个 ViewModel,其中又包含了一个 Kotlin 数据流。...然而,这并不总是能在特定屏幕尺寸下为用户带来最佳的体验。当 UI 元素拉伸过度、相距过远或是过于密集时,往往难以传达信息,触控元素也变得难以辨识,并导致应用的可用性受到影响。...为了让元素能够一直滚动显示到 RecyclerView 的边缘,需要设置 android:clipToPadding="false"。 屏幕越多样越好 Android 一直是个多样化的硬件生态系统。

    2.1K20

    博文|如何对Zabbix Proxy高队列进行故障诊断

    如果对sender到底做了什么感兴趣,可以反复执行上面的命令,相关日志的变化会告诉我们答案。 存在问题时,查看每秒发送多少数值是不够的。data sender的迭代需要几百秒甚至更多。...多次运行查询会显示proxy上的backlog不断增加。 造成这些问题的原因很多,其中一个是Zabbix proxy与server之间的网络连接慢。这种情况下,通常ping值不足以反映网络状况的好坏。...proxy上的运行进程 部署了30000个host之后,之前的进程数量不够支撑当前设置。这个问题不会显示在server日志或server图表。这种情况下,需要监控proxy。...所以,会看到来自server的数据,显示并不繁忙,但是proxy出现问题。这种情况下,你只需要增加更多进程,例如poller、trapper等。...性能图表的‘数据收集进程繁忙’ 更具体一点,我们所感兴趣的trapper,只是在主动模式的proxy上操作的trapper,正如这个例子提到的那样。

    1.6K30

    Android新组件RecyclerView介绍,其效率更好

    :现在都不再用listview了,代替的是RecyclerView,确实是,但是用的毕竟是少数,所以可能很多人对于这个组件不是很了解,那么我们就来介绍一下吧!...1、什么是RecyclerView RecyclerView 是 android-support-v7-21 版本中新增的一个 Widgets,官方对于它的介绍则是:RecyclerView 是 ListView...简单来说就是:RecyclerView是一种新的视图组,目标是为任何基于适配器的视图提供相似的渲染方式。...所有关于布局、绘制和其他相关的问题,也就是跟数据展示相关的所有问题,都被委派给了一些”插件化”的类来处理。这使得RecyclerView的API变得非常灵活。你需要一个新的布局么?...整体总结它的几点如下: Adapter:包装数据集合并且为每个条目创建视图。 ViewHolder:保存用于显示每个数据条目的子View。

    1.4K90
    领券