[译]Android 中 Kotlin 与 RecyclerView 高性能列表

栏目: IOS · Android · 发布时间: 5年前

内容简介:原标题: Kotlin & RecyclerView for High Performance Lists in Android原文地址:www.andreasjakl.com原文作者: Andreas Jakl

原标题: Kotlin & RecyclerView for High Performance Lists in Android

原文地址:www.andreasjakl.com

原文作者: Andreas Jakl

RecyclerView 是在 Android 上显示滚动列表的最佳方法。它确保了高性能和平滑滚动,同时提供具有灵活布局的列表元素。结合Kotlin 的现代语言功能,与传统的 Java 方法相比,RecyclerView 的代码开销大大降低。

示例项目:PartsList - 入门

在本文中,我们将介绍一个示例场景:维护应用程序的滚动列表,列出机器部件:“PartsList”。但是,此方案仅影响我们使用的字符串 - 您可以针对您需要的任何用例复制此方法。

要开始使用,请使用 Android Studio 3+ 创建一个新的 Android 应用。确保启用 Kotlin 支持,并为 MainActivity 选择 “Empty” 模板。或者,如果您不想手动编写以下步骤的代码,请从 GitHub 下载完成的 源码

什么是 RecyclerView?

Android 中的屏幕列表由多个子视图组成。每个都有一个或多个视图的布局。例如,电子邮件应用会向您显示多封电子邮件; 这些项目中的每一项都包括主题,发件人姓名和一堆其他信息。

解析子视图的 XML 布局并将其扩展到类的实例中是一项消耗性能的操作。快速滑动会对手机性能造成巨大压力。目标是始终坚持每秒60帧。但是,这每帧只剩下不到17毫秒的计算时间。

RecyclerView的主要技巧是重新使用列表中的子视图。一旦子视图 滚出可见区域,它就基本上被放入队列中。迟早,当新的子视图滚动时会再次用到它。然后,子视图的 UI 文本内容将被替换。下图显示了这个(简化的)RecyclerView 原理:

[译]Android 中 Kotlin 与 RecyclerView 高性能列表

RecyclerView流程

不幸的是,这种有效的方法需要一些架构背景。刚开始看起来可能感到陌生。然而,一旦您拥有所有组件,就可以轻松的进行自定义。

[译]Android 中 Kotlin 与 RecyclerView 高性能列表

使用RecyclerView需要配置/实现以下组件:

  • RecyclerView:管理一切。它主要由Android预先编写。您提供组件和配置。
  • Adapter:您将花费大部分时间编写此类。它连接到数据源。在RecyclerView的指示下,它会创建或更新列表中的各个项目。
  • ViewHolder:一个简单的类,用于分配/更新视图项中的数据。重新使用视图时,将覆盖先前的数据。
  • Data source:您喜欢的任何东西 - 从简单的数组到完整的数据源。您的适配器与之交互。
  • LayoutManager:负责将所有单独的视图项放在屏幕上,并确保它们获得所需的屏幕空间。

数据源和Kotlin数据类

我们的数据源是一个简单的列表/数组。该列表由自定义类的实例组成。您可以在应用程序中对这些进行硬编码,也可以动态创建它们 - 例如,基于来自在线源的 HTTP REST 请求。

Kotlin有一个很好的功能,可以简化数据类的编写。此方法适用于仅包含数据但不包含任何操作的所有类。我们的示例数据类称为 PartData ,因为它存储有关维护应用程序的计算机部件的信息。

data class PartData ( val id: Long, val itemName: String)
复制代码

对于数据类,Kotlin自动生成所有实用程序函数:

  • 属性:您不再需要像普通 Java 那样编写 gettersetter
  • 附加功能:例如, equals()hasCode()toString()copy()

Antonio Leiva 写了一篇很棒的文章,在相同数据类的情况下将 Java 与 Kotlin 进行比较。您可以节省大约80%的代码并仍然得到相同的结果。

您像任何其他类一样实例化 Kotlin 数据类。请注意,Kotlin 不使用 new 语句,因此我们只使用类名并将值提供给构造函数参数。添加该代码的 nCreate() 您的 MainActivity。

var partList = ArrayList<PartData>()
partList.add(PartData(100411, "LED Green 568 nm, 5mm"))
partList.add(PartData(101119, "Aluminium Capacitor 4.7μF"))
partList.add(PartData(101624, "Potentiometer 500kΩ"))
// ...

复制代码

列表项目布局

RecyclerView 中的每个项目都需要自定义布局。您可以使用任意与 Activity 布局相同的方式创建这个文件:在 Android Studio 的 Android-style 项目视图中,打开 app > res > layout。右键单击 "layout" 文件夹名称,然后选择 New > Layout resource file。创建一个名为 part_list_item.xml 的布局。

对于示例用例,请使用以下属性:

LinearLayout
match_parent
wrap_content
16dp

接下来,将两个子项添加到布局中。我们将使用 TextView的。只要确保你给他们有用的ID,因为我们需要这些来分配Kotlin代码中的文本:

  • Id 1: @+id/tv_part_item_name (larger text size)
  • Id 2: @+id/tv_part_id (smaller text size)
[译]Android 中 Kotlin 与 RecyclerView 高性能列表

未完待续。。。

欢迎关注 Kotlin 中文社区!

中文官网:www.kotlincn.net/

中文官方博客:www.kotliner.cn/

公众号:Kotlin

知乎专栏:Kotlin

CSDN:Kotlin中文社区

掘金:Kotlin中文社区

简书:Kotlin中文社区


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

有限与无限的游戏

有限与无限的游戏

[美]詹姆斯·卡斯 / 马小悟、余倩 / 电子工业出版社 / 2013-10 / 35.00元

在这本书中,詹姆斯·卡斯向我们展示了世界上两种类型的「游戏」:「有限的游戏」和「无限的游戏」。 有限的游戏,其目的在于赢得胜利;无限的游戏,却旨在让游戏永远进行下去。有限的游戏在边界内玩,无限的游戏玩的就是边界。有限的游戏具有一个确定的开始和结束,拥有特定的赢家,规则的存在就是为了保证游戏会结束。无限的游戏既没有确定的开始和结束,也没有赢家,它的目的在于将更多的人带入到游戏本身中来,从而延续......一起来看看 《有限与无限的游戏》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

随机密码生成器
随机密码生成器

多种字符组合密码

MD5 加密
MD5 加密

MD5 加密工具