• 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 > Lambda表达式在Kotlin中怎样工作的:setOnClickListener的转换(KAD 18),180

Lambda表达式在Kotlin中怎样工作的:setOnClickListener的转换(KAD 18),180

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

网友通过本文主要向大家介绍了Lambda表达式在Kotlin中怎样工作的:setOnClickListener的转换(KAD 18),180等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Lambda表达式在Kotlin中怎样工作的:setOnClickListener的转换(KAD 18),180


作者:Antonio Leiva

时间:Mar 28, 2017

原文链接:https://antonioleiva.com/lambdas-kotlin-android/

 

 

虽然,我在其它文章讲过一点Lambda表达式,我愿意更深层次解释Kotlin中Lambda表达式是怎样工作的,以及当我们用Java库时,他们是怎样以Lambda表达式的单一方法转换接口。

 

特别是我要给出一些例子解释怎样简化Android框架的用法,我们还将详细看到Android视图的setOnClickListener。

 

SetOnClickListener转换

 

我最喜欢Kotlin特性之一就是由于有了一些约定它简化Android框架的工作。

 

 

例如,setOnClickListener函数,在Java中时这样定义的:

1 public void setOnClickListener(OnClickListener l) {
2    ...
3 }

 

而在Kotlin中我们使用它时,可以这样:

1 fun setOnClickListener(l: (View) -> Unit)

 

这节省我们必须创建接口的一个匿名实现,极大地简化了UI组件的初始化工作。

 

用SetOnclickListener原本方法

 

 

依照上面,我们已经节省了足够的代码了,就是我们原必须创建OnClickListener的匿名类:

1 view.setOnClickListener(object : View.OnClickListener {
2     override fun onClick(v: View?) {
3         toast("Hello")
4     }
5 })

 

不过你将看到编辑器直接给你的警告,建议你用Lambda方法。

 

你能够做的转换:

 

1 view.setOnClickListener({ v -> toast("Hello") })

 

 

简单,对吧?但是,这还能更进一步简化。

 

 

如果函数的最后一个参数是函数,它能够移到圆括号外面。

 

 

因此,我们能够按此提取侦听器:

 

1 view.setOnClickListener() { v -> toast("Hello") }

 

 

如果我们有多个参数,其余的参数则在圆括号内,即使这些参数是函数。仅仅最后一个参数能够提出来。

 

 

如果函数仅有一个参数,且它是一个函数,则圆括号能删除

 

 

而不是留着空的圆括号,我们最好删除这空的圆括号:

 

1 view.setOnClickListener { v -> toast("Hello") }

 

 

这就构成了代码块。在这种方法下,我们能够定义我们自己的模型语言DSL。

 

一个非常典型的例子是Kotlin参考页面,他们构件DSL通过代码创建HTML。

 

如果你不用Lambda参数,你可以删除函数的左边部分

 

如果你仅有一个参数这是正确。不使用视图(v),就可以删除它:

1 view.setOnClickListener { toast("Hello") }

 

另外,在函数仅接收参数,则不是在左边定义,而是用保留字it,节省一些字符。

 

例如,如果我们用视图传递它到另一个方法:

 

1 view.setOnClickListener { v -> doSomething(v) }

 

 

我们可以选择简单的用it:

1 view.setOnClickListener { doSomething(it) }

 

Lambda表达式,你的朋友

 

你见到的这些代码的不同之处是非常重要的。这不仅为你节省了字符(约70%),还极大地提高了代码的可读性。

 

 

我们只编写真正重要的代码,而跳过那些并没有多大用处的代码。

 

 

如果你想进一步学习更多这些知识,能够非常流利创建自己的Android应用程序,我建议你获取这本免费指南,学习怎样构建你的第一个项目,或直接购买这本书,学习怎样从头开始创建一个完整的应用程序。

 

 

 

 

 

 

 

 

 

 

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

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

  • Lambda表达式在Kotlin中怎样工作的:setOnClickListener的转换(KAD 18),180

相关文章

  • 2017-05-26Android--去除EditText边框及添加下划线
  • 2017-05-26手机影音7--视频播放器的基本功能(4),7--基本功能
  • 2017-05-26Android学习笔记-ImageView(图像视图),android-imageview
  • 2017-05-26Android Material Design NavigationView 及 Palette 颜色提取器,materialpalette
  • 2017-05-26【架构篇】Android移动app架构设计浅谈
  • 2017-05-26Android中对Handle机制的理解
  • 2017-05-26安卓006单元测试
  • 2017-05-26可伸缩的textview,伸缩textview
  • 2017-05-26安卓---Toast工具类,有点懒,安卓---toast工具类
  • 2017-07-22Android深入四大组件(四)广播的注册、发送和接收过程

文章分类

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

最近更新的内容

    • React-Native系列Android——Native与Javascript通信原理(二)
    • Android使用静默安装时碰见的问题,android静默
    • [Android]动态加载/热部署框架汇总,android框架
    • Android无线开发的几种常用技术综述
    • Linux内核系列—6.操作系统开发之内存分页机制,linux分页
    • eclipse安装genymotion插件。,eclipsegenymotion
    • AlertDialog创建6种对话框的用法
    • Android安全攻防战,反编译与混淆技术完全解析(上)
    • Android特效专辑(十二)——如何仿支付宝咻一咻功能实现波纹扩散特效
    • Android系统的“程序异常退出”,android退出

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

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