• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > 在Kotlin编写RecyclerView适配器(KAD 16),kotlinrecyclerview

在Kotlin编写RecyclerView适配器(KAD 16),kotlinrecyclerview

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了recyclerview,android recyclerview,recyclerview的使用,recyclerview 详解,recyclerview 分割线等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

在Kotlin编写RecyclerView适配器(KAD 16),kotlinrecyclerview


作者:Antonio Leiva

时间:Mar 14, 2017

原文链接:https://antonioleiva.com/recyclerview-adapter-kotlin/

 

通过创建RecyclerView适配器,Kotlin可以简化您的生活,这是一个有趣的方法。

 

在这个方法中,您可以看到更易阅读的代码组织,且避免冗余代码。

 

Kotlin的RecyclerView适配器

 

我们创建一个适配器时,要设置标题和将图形插入进各单元内。

 

我们不允许项目的更改,这就是个非常简单的适配器。如果我们要更新数据,就需要创建新的适配器,并将数据设置到RecyclerView中。

 

模型

 

 

我们也用一个非常简单的模型,它仅需要一个标识符、标题和图形的URL。

 

我们将用一个数据类,您还记得我们在前几篇文章见过:

1 data class Item(val id: Long, val title: String, val url: String)

 

这样我们就已经有一个类和它的构造函数、不可变属性、以及一些有用的函数实现,如:equals 或 hashCode。

 

适配器

 

适配器的结构如下,它自创建一些必须的方法:

 1 class MyAdapter : RecyclerView.Adapter() {
 2      
 3     override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
 4     }
 5  
 6     override fun onBindViewHolder(holder: ViewHolder?, position: Int) {
 7     }
 8  
 9     override fun getItemCount(): Int {
10     }
11  
12     class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
13 }

 

您将看见我已经创建了一个由原始ViewHolder扩展而来的ViewHolder类。

 

这是因为适配器需要原始抽象类的实现。

 

另外,有些元素被标注为nullable。这是因为如果库没有适当的@Nullable和@NonNull标注,Kotlin就没有方法知道null是否允许,这就要让我们来决定了。

 

如果我们通过默认方式自创建方法了,它就会认为其值是nullable。

 

但是,进一步研究支持库,我们就知道哪些值是为null,所以我们能够删除它。

 1 class MyAdapter : RecyclerView.Adapter() {
 2     
 3     override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
 4     }
 5  
 6     override fun onBindViewHolder(holder: ViewHolder, position: Int) {
 7     }
 8  
 9     override fun getItemCount(): Int {
10     }
11  
12     class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
13 }

 

构造函数

 

适配器需要接收参数项目和侦听器。这就像这样:

class MyAdapter(val items: List, val listener: (Item) -> Unit)

 

方法的实现非常容易。我用在前一篇创建的扩展函数方法膨胀视图:

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ViewHolder(parent.inflate(R.layout.view_item))
 
override fun onBindViewHolder(holder: ViewHolder, position: Int) = holder.bind(items[position], listener)
 
override fun getItemCount() = items.size

 

有三个方法可以实现由简约的形式,获得以前的结果。用三行我们就实现了完整的适配器。

 

现在就去实现ViewHolder。

 

ViewHolder

 

ViewHolder由模型分配值到它们相应的视图:

1 class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
2     fun bind(item: Item, listener: (Item) -> Unit) = with(itemView) {
3         itemTitle.text = item.title
4         itemImage.loadUrl(item.url)
5         setOnClickListener { listener(item) }
6     }
7 }

 

这里的每件事都已经在其他文章中读到:with函数、ImageView的loadUrl扩展函数,用Kotlin Android扩展访问视图,和点击侦听器的映射。

 

适配器赋值

 

现在仅剩一件事:将适配器赋值到视图:

1 recycler.layoutManager = GridLayoutManager(this, 2)
2 recycler.adapter = MyAdapter(items) {
3     toast("${it.title} Clicked")
4 }

 

最后一个函数是侦听器,它接收一项。当您点击这项时,代码就简单地将标题打印到该项上。

 

结论

 

在Kotlin中实现RecyclerView就这么简单。

 

到目前为止,我们使用一些学过的工具,已将代码简化到最低程度。

 

如果您要学习更多的所有这些,以娴熟方法创建您自己的Android应用程序,我建议您去获取免费指南,它教您怎样建立您的第一个项目,或者获取

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 从头开始学RecyclerView(六)LayoutManager
  • AndroidStudio下使用 RecyclerView xml文件不显示预览条目并报错类似:NoClassDefFoundError 问题解决,studiorecyclerview
  • 解析View的getDrawingCache方法,getdrawingcache
  • 从源码角度入手实现RecyclerView的Item点击事件,recyclerviewitem
  • 在Kotlin编写RecyclerView适配器(KAD 16),kotlinrecyclerview
  • 【RecyclerView与Glide】实现一个Android电子书阅读APP,gliderecyclerview
  • 深入理解 Android 之 View 的绘制流程,androidview
  • Android之RecyclerView的原生Bug-Inconsistency detected. Invalid view holder adapter positionViewHolder{a1bbfa3 position=2 id=-1, oldPos=-1, pLpos:-1 no parent},recyclerviewholder
  • RecyclerView在软键盘弹出时自动调整内容技巧,recyclerview技巧
  • RecyclerView的五大开源项目-解决办法

相关文章

  • 2017-05-26android四大组件之Broadcast,androidbroadcast
  • 2017-05-26lua中使用luasocket通信,写了一个简单的事件库
  • 2017-05-26Android中"get","post"请求的其中三种常用数据提交方式,android常用数据
  • 2017-05-26安卓第三天笔记--通知-进度条-时期,安卓第三天
  • 2017-11-18Android检查网络连接状态
  • 2017-05-26Yarn上运行spark-1.6.0
  • 2017-05-26Android 弱引用和软引用,android引用和软
  • 2017-05-221.2 开发环境搭建
  • 2017-05-26android动画详解四 创建动画浅析
  • 2017-05-26Android Volley框架的使用(4),androidvolley

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android程序中使用iconfont心得,androidiconfont
    • Android--控件属性汇总
    • Docker+Redis3集群环境搭建
    • android http下载视频到指定目录,android目录
    • Android Plugin,androidplugin
    • Android SDK镜像更新网速慢的解决问题,androidsdk
    • getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir(),mediacachefiles
    • Android实现按钮点击效果(第一次点击变色,第二次恢复),android按钮
    • Android最佳实践之SystemBar状态栏全版本适配方案
    • Android WebView File域同源策略绕过漏洞浅析

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有