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

如何让你的回调更具Kotlin风味

Kotlin来改造Java中的回调 针对上述Java中的回调写法,估计大部分人转到Kotlin后,估计会做如下处理: 1、如果接口只有一个回调函数可以直接使用lamba表达式实现回调的简写。...改造上述代码为例: 1、(只有一个回调函数简写形式)OnClickListener回调Kotlin改造 //只有一个回调函数普通简写形式: OnClickListener的使用 mBtnSubmit.setOnClickListener...{ view -> //add your logic code } //针对OnClickListener监听设置Coroutine协程框架中onClick扩展函数使用 mBtnSubmit.onClick....cancelRequest(imageView) } } 复制代码 可以看到使用DSL配置的回调更加具有Kotlin风味,让整个回调看起来非常的舒服,那种效果岂止丝滑。...使用到技术点: 1、Kotlin基础开发知识 2、Kotlin扩展函数 3、Kotlin的lambda表达式 4、Swing UI组件开发知识 5、Intellij Plugin开发基本知识 6、IntelliJ

1.6K20

利用Kotlin的协程实现简单的异步加载详解

所以我们更新程序界面的操作imageView.setImageBitmap(bitmap)放在了这个协程里。...接下来我们定义Deferred<T 类(前面我们在load函数中返回的类型)的一个扩展函数then() ,它也使用一个名叫block的lambda表达式作为参数。...launch()创建了另外一个协程,这个新的协程运行在程序的主线程中。...Kotlin Coroutine DSL 上边我们定义了两个扩展函数和一个用于取消协程的类,让我们来看看如何使用它们,代码如下: load { MediaStore.Images.Media.getBitmap...扩展函数then()是被infix修饰的,因此当Deferred<Bitmap 返回之后我们可以使用上面那种奇特的语法调用它。我们传递到then()中的lambda接收到一个Bitmap对象。

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

    drawable用Kotlin应该这样写

    ,很多通用的样式并不能快速复用,需要合理的项目资源管理规范才能实施。...有2种方式infix函数(中缀表达)和property setter 1.infix函数特点和规范: Kotlin允许在不使用括号和点号的情况下调用函数 必须只有一个参数 必须是成员函数扩展函数 不支持可变参数和带默认值参数.../**为所有ImageView添加扩展infix函数 来去掉括号*/ infix fun ImageView.src(drawable: Drawable?)...个人认为如果我们大量使用infix函数,阅读困难会大大增加,所以建议函数命名必须可以直击函数功能,而且函数功能简单且单一。...2.property setter方式,主要使用kotlin可以简化setter为 变量 =来去括号: /**扩展变量*/ var ImageView.src: Drawable get() =

    93720

    Kotlin 风格,应该这样写drawable !

    ,很多通用的样式并不能快速复用,需要合理的项目资源管理规范才能实施。...2种方式infix函数(中缀表达)和property setter infix函数特点和规范: Kotlin允许在不使用括号和点号的情况下调用函数 必须只有一个参数 必须是成员函数扩展函数 不支持可变参数和带默认值参数.../**为所有ImageView添加扩展infix函数 来去掉括号*/ infix fun ImageView.src(drawable: Drawable?)...个人认为如果我们大量使用infix函数,阅读困难会大大增加,所以建议函数命名必须可以直击函数功能,而且函数功能简单且单一。...property setter方式,主要使用kotlin可以简化setter为 变量 =来去括号: /**扩展变量*/ var ImageView.src: Drawable get() = drawable

    52820

    Kotlin入门教程,快使用Kotlin

    > 静态类和静态方法 object(全局): 使用object修饰的类,同时会创建一个实例(类似Java中的单例模式),可以直接通过 类名.方法名或者类名.属性名来直接调用该类中的方法或者属性。...is TextView){ 4} 扩展函数 扩展函数数是指在一个类上增加一种新的行为,甚至我们没有这个类代码的访问权限。...下面列举kotlin中常用的几个函数,用法可以参考:Kotlin中let、also、with、apply函数 1.1、let函数 let扩展函数的实际上是一个作用域函数,当你需要去定义一个变量在一个特定的作用域范围内...with函数与其他函数不同,他不是一个扩展函数,它是某个对象作为函数的参数,在函数块内可以通过 this 指代该对象。...run函数实际上可以说是let和with两个函数的结合体,run函数只接收一个lambda函数为参数,闭包形式返回,返回值为最后一行的值或者指定的return的表达式。

    1K10

    一起来看看 Android 官推 kotlin-first 的图片加载库

    :Coil 的 API 充分利用 Kotlin 的新特性,而且还有丰富的拓展函数,简化和减少了很多样板代码 更流行:Coil 通过 Kotlin 来开发,并且使用包含 Coroutines、okhttp...、okio 和 AndroidX Lifecycles 在内的非常多流行的开源库 从 Coil 的特性可以看出,这是一个非常适合个人 App 使用的图片加载库,特别是纯 Kotlin 开发的 App。...一、基本使用 ---- Coil 可以在 mavenCentral() 下载 implementation("io.coil-kt:coil:1.1.1") Coil 给 ImageView 加了很多拓展函数...,也可能指向网络图片,Mappers 和 Fetchers 搭配使用,可以对资源类型进行区分,举个例子: imageView.load("android.resource://example.package.name...具有资源名称的 android.resource Uri 映射到包含其资源 ID 的 Uri Decoders Android 支持了很多图像格式,但也有很多它不支持的格式(例如:Gif、SVG、

    88920

    Kotlin入门(23)适配器的进阶表达

    随着用户的下拉或者上拉手势,已经被回收的列表项要重新加载到界面上,倘若每次加载都得从头创建视图对象,势必增加了系统的资源开销。...为方便理解循环适配器的Kotlin编码,下面微信的公众号消息列表为例,给出对应的消息列表Kotlin代码: //ViewHolder在构造时初始化布局中的控件对象 class RecyclerLinearAdapter...,需要在适配器代码头部加上以下两行代码,其中第一行代码表示引用了Kotlin扩展插件LayoutContainer,第二行代码与Activity的一样表示导入了指定布局文件里面所有控件对象: import...依照三个要素的三种处理对策,进而提炼出来了循环适配器的通用类RecyclerCommonAdapter,详细的Kotlin代码示例如下: //循环视图通用适配器 //具体业务中会变化的三类要素抽取出来...至此本节的适配器实现过程终于落下帷幕,一路上可谓是过五关斩六,硬生生把数十行的Java代码压缩到不到十行的Kotlin代码,经过不断迭代优化方取得如此彪炳战绩。

    1.8K41

    使用Kotlin高效地开发Android App(三)

    = "test kotlin" a = null //编译成功 1.2 !! !!是非空断言运算符。任何值转换为非空类型,若该值为空则抛出异常。...let { .... } 在使用Kotlin高效地开发Android App(二)中,曾经介绍过结合run和apply函数一起使用的方式。其实,里面使用了“!!”...在项目中,我对toast以及glide框架尝试使用dsl的方式来封装。之前的用法是使用Kotlin扩展函数,由于团队的其他成员更偏好链式调用,目前暂时保留了两种写法。...3.1 对glide的封装 glide的扩展函数,可以满足项目中的使用。 /** * 占位符矩形 */ fun ImageView.load(url: String?)...文中的dsl还是结合了扩展函数使用的,个人认为是进一步的封装。相比起链式调用,我还是比较偏向dsl。

    87710

    Android实现异步的几种方式——从简单的图片加载说起

    但由于Java的单继承多实现,所以还是使用实现Runnable方式更实用一些。handler的post方法可以消息发送回主线程,实现线程间切换。...这种方式使用了线程池+Handler实现,较好得管理分配资源,还可以拿到进度回调,有较高的拓展性。但需要创建新类,代码也会随之增加,对于简单的异步操作,这种方式有些繁琐。...越来越多的公司和项目开始使用Kotlin编码,毕竟Kotlin得到了谷歌爸爸的支持,而且Kotlin的优秀语言特性,使得它受到开发者的广泛欢迎。 今天介绍Kotlin的一个概念,叫做协程。...标准库为kotlin.coroutines.experimental(写作时使用kotlin-1.20版本),可见仍然还是一个实验性功能。...小结 从个人感觉来说,我比较推荐使用RxJava和协程来实现,处理周密的话,轻松避免资源浪费和内存泄漏。

    1.6K61

    一次使用Kotlin实现酷炫多选操作的尝试

    比如,当你在Apple Music中创建自己的播放列表时,如果不切换屏幕或者无尽的滚动一遍被选中的歌曲,你都不清楚自己选择了哪些歌曲。 如果我们想使用筛选功能事情就变得更糟糕了。...这里是我在实现这个库的过程中,Kotlin的这些特性给我带来了方便: 1.扩展函数 Kotlin扩展函数功能使得我们可以为现有的类添加新的函数,而不用修改原来的类。 就拿安卓的View来说。...Extensions.kt文件中找到更多使用扩展函数的例子。...不同于Java的switch,Kotlin的when表达式返回一个值,所以你需要把它赋予一个变量或者从一个函数返回它。...有了它你就可以在两个adapter中使用相同的viewholder。 3.接下来,为未选中的列表和选中列表创建两个adapter。

    1.2K20

    使用Anko Layouts来开发Android ( 翻译)

    Anko Layouts是使用Kotlin针对Android布局写的一个DSL,很多方面体现了kotlin这个语言的一些特性,也确实能简化开发工作,使用时有眼前一亮的感觉。...Anko由一些类型安全的kotlin扩展函数和属性构成。 因为手写这些扩展比较乏味,所以他们是用android.jar文件自动生成的。 Anko是可扩展的吗 答案是yes。...verticalLayout(一个LinearLayout,但是已经有了LinearLayout.VERTICAL方向属性),editText和button都是扩展函数,用来构建新的 View实例并且将它们添加到...在频繁使用的View中,比如TextView,EditText,Button或者ImageView中,这种代码块经常存在。...幸运的是,在Anko中,你可以传递资源标识符到辅助块(button(R.string.login))和扩展属性中(button{textResource = R.string.login }) 这里注意属性名是不一样的

    2K70

    Kotlin入门(22)适配器的简单优化

    适配器的种类虽多,却个个都不好用,数组适配器为例,它与Spinner配合实现下拉框效果,其实现代码纷复繁杂,一直为人所诟病。...故而在下拉框一小节之中,干脆把ArrayAdapter连同Spinner一股脑都摒弃了,取而代之的是Kotlin扩展函数selector。...= null     } } 相比之下,直接转换得来的Kotlin代码,最大的改进是把构造函数及初始化参数放到了第一行,其它地方未有明显优化。...这意味着,上面的控件对象必定是先获得实例,在它们被使用的时候肯定是非空的,因此完全可以告诉编译器,这些控件对象一定会在使用前赋值,编译器您老就高抬贵手,睁一只眼闭一只眼放行好了。...var tv_desc: TextView     } } 以上的Kotlin代码总算有点模样了,虽然总体代码还不够精简,但是至少清晰明了,其中主要运用了Kotlin的以下三项技术: 1、构造函数和初始化参数放在类定义的首行

    1.3K10

    【Jetpack】DataBinding 架构组件 ④ ( 使用 @BindingAdapter 注解为布局组件绑定自定义逻辑 | 网络图片加载 | 本地图片加载 )

    组件绑定数据模型 , 传入一个 url 网络图片地址 , 在该组件中显示网络图片 , 如果网络图片加载失败或者为空 , 则加载默认的本地资源 ; 上述操作必须 自定义一段代码逻辑进行实现 , 使用简单的数据绑定无法实现该功能...@BindingAdapter("注解参数") 注解修饰的 Java 静态函数 ; <ImageView android:id="@+id/imageView"...中 , 定义 Java 静态方法 , 需要在 companion object 伴生对象 中 , 使用 @JvmStatic 修饰函数 ; 使用 @BindingAdapter("image") 修饰函数...中 , 定义 Java 静态方法 , 需要在 companion object 伴生对象 中 , 使用 @JvmStatic 修饰函数 ; 使用 @BindingAdapter("image") 修饰函数...中 , 定义 Java 静态方法 , 需要在 companion object 伴生对象 中 , 使用 @JvmStatic 修饰函数 ; 使用 @BindingAdapter(value = ["image

    1.1K40

    【错误记录】Android Studio 编译报错 ( To use data binding annotations in Kotlin, apply the ‘kotlin-kapt‘ plu )

    文章目录 一、报错信息 二、kotlin-kapt 插件简介 三、解决方案 一、报错信息 ---- 在 Android Studio 中开发 DataBinding , 使用 如下代码开发 绑定适配器...加载网络图片 : import android.widget.ImageView import androidx.databinding.BindingAdapter class ImageViewBindingAdapter...{ companion object{ @JvmStatic @BindingAdapter("image") fun setImage(imageView...: ImageView, url: String) { } } } 在 Kotlin 中 , 实现静态函数 , 需要 在 companion object 伴生对象中 , 使用...如 : 在 DataBinding 中 , 使用生成的代码数据模型绑定到布局文件中 ; 三、解决方案 ---- 在 Module 模块下的 build.gradle 构建脚本中 , 添加 kotlin-kapt

    71030

    kotlin--综合运用Hilt、Paging3、Flow、Room、Retrofit、Coil等实现MVVM架构

    前面我们使用Java来运用JetPack中的一系列组件,又使用kotlin运用这些组件实现了一系列功能: kotlin--Flow文件下载 kotlin--Flow结合Room运用 kotlin--Flow...结合retrofit运用 kotlin--StateFlow运用 kotlin--SharedFlow运用 接着,Jetpack的Paging3中,我们使用的语言是kotlin,相信通过这些项目的对比,...你就能发现koltin取代Java的理由了,kotlin拥有更好的扩展性,更高的性能,更简洁的代码,更好的Jetpack组件支持,如果你还对kotlin不熟悉,那么可以查阅我的kotlin专题博客,在此也要感谢动脑学院...为了后续Paging的使用,为RecyclerView添加设置Adapter和liveData的扩展函数: fun RecyclerView.setPagingAdapter...,无网络时,直接返回Success 1.获取网络状态的扩展函数 定义一个扩展函数用来获取网络状态: @Suppress("DEPRECATION") @SuppressLint("MissingPermission

    3.5K31
    领券