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

Android 开发者如何函数式编程 (三)

如果你还没有阅读过第一部分和第二部分,可以点击这里阅读: Android 开发者如何函数式编程 (一) Android 开发者如何函数式编程 (二) 高阶函数 高阶函数是可以接受将函数作为输入参数,也可以接受将函数作为输出结果的一类函数...在 Java 里 x 必须声明为 final,由于 click listener 可能在任意时间执行, 当它执行时 x 可能已经不存在或者值已经被改变,所以在 Java 里 x 必须声明为 final。...Java 强制我们把这个变量声明为 final,实际上是为了把它设置成不可变的。 一旦它是不可变的,Java 就知道不管 click listener 什么时候执行,x 都等于 5。...Kotlin 中的函数都是闭包。他们可以跟踪和响应其环境中的更新。 第一次触发 click listener 时, 会打印 5。...无论何时,只要你想让业务逻辑响应环境中的状态变化,那就可以使用闭包。 假设你在一个按钮上设置了点击 listener, 点击按钮会弹出对话框向用户显示一组消息。

1.3K80

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

前面在介绍列表视图和网格视图时,它们的适配器代码都存在视图持有者ViewHolder,因为Android对列表类视图提供了回收机制,如果某些列表项在屏幕上看不到了,则系统会自动回收相应的视图对象。...由于循环视图适配器并不提供列表项的点击事件,因此开发者要自己编写包括点击、长按在内的事件处理代码。...为方便理解循环适配器的Kotlin编码,下面以微信的公众号消息列表为例,给出对应的消息列表Kotlin代码: //ViewHolder在构造时初始化布局中的控件对象 class RecyclerLinearAdapter...下面便是个循环视图的网格适配器,它实现了类似淘宝主页的网格频道栏目,具体的Kotlin代码如下所示: //把公共属性和公共方法剥离到基类RecyclerBaseAdapter, //此处仅需实现getItemCount...注意到适配器代码仍然通过findViewById方法获得控件对象,可是号称在Anko库的支持之下,Kotlin早就无需该方法就能直接访问控件对象了呀,为啥这里依旧靠老牛拉破车呢?

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

    Kotlin入门(2)让App开发变得更容易

    :$kotlin_version" } } 2、打开模块的build.gradle,在文件开头补充添加Kotlin的扩展插件,配置添加如下: apply plugin: 'kotlin-android...' apply plugin: 'kotlin-android-extensions' 接着在dependencies节点下补充添加anko插件的编译说明,如下所示: compile "org.jetbrains.kotlin...选择菜单后打开Kotlin的Activity创建页面,单击“Next”按钮进入创建信息的填写页面,如下图所示: ?...上面的第一局为修改控件文本的PK,结果是Kotlin小胜;接下来依次再设四局PK,其中第二局为点击监听器的处理。...Button是Android的常用按钮控件,代码中经常要处理Button控件的点击事件,下面的Java代码就是响应Button点击的一个例子: final Button btn_click =

    1.2K30

    Kotlin 轻量级Android开发

    Kotlin是一门非常简单的语言,其主要目标之一就是提供强大语言的同时又保持简单且精简的语法。 kotlin 特性 其主要特性如下所示: 轻量级:这一点对于Android来说非常重要。...项目所需要的库应该尽可能的小。Android对于方法数量有严格的限制,Kotlin只额外增加了大约6000个方法。 互操作:Kotlin可与Java语言无缝通信。...互操作 Kotlin提供了一些非常棒的互操作特性,这对于Android开发帮助非常大。其中之一就是拥有单个方法的接口与lambda表达式之间的映射。...接口的默认实现 顾名思义,它便是指接口可以和抽象类一样,有方法体的默认实现。 我把它归结在语法糖里,是因为java8中早已有了一模一样的东西,对应的关键字叫default。...真的在很多方面都简化了Android的开发工作。

    93910

    【翻译】Kotlin 1.1 新版本同样适合安卓开发者

    《Kotlin for Android Developers》书的作者 Kotlin 1.1 的发布真是激动人心啊!...) : RecyclerView.Adapter() { ... } 同时你的 ViewHolder 可能也需要接收这个监听事件,把它赋值给这个视图的点击事件监听者...数据类在最初始的版本中就能够使用解构体,那是多亏了自动生成的 componentX() 方法。...协程 在 Kotlin 1.1 中协程是一个令人振奋的新闻。尽管最后发布的依然是带有“实验性”的包,不过它已经功能齐全并且从今天开始你也可以开始在你的项目中使用了!...想必你有可能已经知道 Kotlin 中协程并不是一个库或者一种特殊的实现,它是一种语言特性,允许我们通过它创造实用的库。

    1.1K60

    破解 Kotlin 协程(8) - Android 篇

    关键词:Kotlin 协程 Android Anko Android 上面使用协程来替代回调或者 RxJava 实际上是一件非常轻松的事儿,我们甚至可以在更大的范围内结合 UI 的生命周期做控制协程的执行状态...Anko 也提供了一些比较方便的方法,例如 onClick 等等,如果需要,也可以引入它的依赖: //提供 onClick 类似的便捷的 listener,接收 suspend Lambda 表达式 implementation...Activity 直接调用,因此也可以将 Presenter 的方法生命成 suspend 方法,然后用 coroutineScope 嵌套作用域,这样 MainScope 被取消后,嵌套的子作用域一样也会被取消...MainScope 的 listener 扩展,源码地址:kotlin-coroutines-android(https://github.com/enbandari/kotlin-coroutines-android...所以这里的关键点在于如何拿到作用域。 这样的 listener 我已经为大家在框架中定义好啦,请参见 2.3。

    1.1K31

    不服来战,看Kotlin如何完爆Java

    前言:Kotlin因支持谷歌和简化Android开发而声名鹊起。看看它如何解决Java的许多痛点。 Why Kotlin?...对于函数式编程,没有本地的支持:在Java中,有Stream API (再说一次,它只支持从API 24开始的Android),但是它在语言中的集成类似于Optional;它不存在于与原始类型相关联的对象中...支持匿名函数(Lambdas):尽管Java 8包含了对Lambda函数的支持,但这些都不是一级公民;这意味着,尽管我们可以使用lambdas以单个方法实现匿名接口,但Java不支持将函数作为参数传递给方法...(事实上,它的创建者应该为他所说的“十亿美元的错误”道歉),而这些检查中有多少是为了避免在我们的应用程序中出现崩溃而做出的补丁呢?...Kotlin是由Jetbrains设计和开发的一种语言,这种语言还在不断的进化中,最重要的是,它可以在JVM上执行。这使它成为Android应用的完美候选者。

    1K50

    RxBinding详解: 规范而强大的安卓UI响应式编程

    一段时间后,你的fragment或者activity中由于各种匿名类而显得十分混乱。这时,如果你想再为该类中控件/视图添加由其它视图触发的响应事件,那将变得非常复杂。...在传统Android中,我们必须实现整个TextWatcher才行,这会多出许多行没必要的代码,因为你还得实现beforeTextChanged方法与 afterTextChanged方法。...你可以想象,通过RxJava的操作方法及自定义的操作方法你可以实现许多功能。 我想再表扬一下这么强大的语法糖,远超Android这些视图/控件API。...更多功能 极少数场合我们需要对一个视图的点击事件进行多次监听(由于各种原因)。你知道Android是不能多次监听同一个点击事件的除非你自己写一堆代码去手动实现。...在 context 中使用 share 允许对同一个button点击事件的多次监听,简直太强大了。 RxBinding 癖好与安装 在使用RxBinding时需要注意一些地方。

    2.9K40

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

    今天我们来讲个非常非常简单的东西,那就是回调俗称Callback, 在Android开发以及一些客户端开发中经常会使用回调。...来改造Java中的回调 针对上述Java中的回调写法,估计大部分人转到Kotlin后,估计会做如下处理: 1、如果接口只有一个回调函数可以直接使用lamba表达式实现回调的简写。...中回调,有不少的Kotlin的小伙伴在公众号留言向我吐槽过,感觉这样的写法是直接从Java中的翻译过来的一样,完全看不出Kotlin的优势在哪。...第二步: 然后打开具体某个类文件,将光标定位在具体代码生成的位置, 第三步: 使用快捷键调出Generate中的面板,选择其中的“Listener Builder”, 然后就会弹出一个面板,可以点击add...第四步: 最后点击OK就可以在指定光标位置生成需要的代码。

    1.6K20

    Android平台的Swift—Kotlin

    四、Android官方开发语言 JetBrains其实在2011年就推出了Kotlin, 在之后的很长一段时间都处于设计,开发和完善当中,2016年才发布第一个正式版本,而在2017年5月份的Google...声明变量为可空后,在运行时便不会抛出异常。 类型智能转换:通过is进行类型判断后,编译器自动进行类型转换。父类引用可以调用子类接口,注意转换只在is的代码块中生效。...生成的class文件打成jar包后,最终可以生成Android的APK,或供Java服务端调用。...kotlin中的可变集合对Java的集合进行了包装,同时它实现了一套不可变集合库。 [12.png] 访问: [13.png] 6、伴生对象 Kotlin中没有静态属性和方法。...目前已经支持所有腾讯在研和运营的手游项目。 欢迎点击链接:http://wetest.qq.com/product/auto-compatibility-testing 使用专家兼容测试服务。

    3.5K90

    Android 优雅处理重复点击(建议收藏)

    一般手机上的 Android App,主要的交互方式是点击。用户在点击后,App 可能做出在页面内更新 UI、新开一个页面或者发起网络请求等操作。...Android 系统本身没有对重复点击做处理,如果用户在短时间内多次点击,则可能出现新开多个页面或者重复发起网络请求等问题。因此,需要对重复点击有影响的地方,增加处理重复点击的代码。...之前的处理方式 之前在项目中使用的是 RxJava 的方案,利用第三方库 RxBinding 实现了防止重复点击: fun View.onSingleClick(interval: Long = 1000L...为此将判断是否触发单次点击的代码抽离出来,单独作为一个方法: fun View.onSingleClick( interval: Int = SingleClickUtil.singleClickInterval...: true, listener ) } } 在布局文件中设置单次点击: <androidx.appcompat.widget.AppCompatButton android

    1.1K30

    浅试Android开发

    创建虚拟机并运行demo在介绍项目结构之前,先创建一个开发测试用的Android虚拟机,创建位置为菜单栏-Tools-Device Manager,点击后右侧开启设备管理页面,选择Medium Phone...它包含:java:存放Java或Kotlin源代码的目录,通常会有一个与应用包名相对应的子目录。在空项目中,默认会有一个MainActivity类,这是应用的入口点。...它描述了在特定活动中显示的视图和布局结构。通过XML格式,开发者可以直观地定义界面的各个元素及其属性。我感觉很类似传统前端开发中的HTML。...在MainActivity类中,onCreate方法是活动的入口点,主要作用是设置活动的内容。在这里,调用了setContent方法来定义用户界面。通过DemoTheme,应用了主题样式。...通过组合不同的UI元素,开发者可以快速构建复杂的界面,同时保持代码的清晰和结构化。虽然我的java依托,但搜搜语法也能直接上手试试。我编写了一个入门常见案例:点击后+1的按钮。

    9520

    使用 Kotlin 构建 Android 应用 | Kotlin 迁移指南 (上篇)

    ) Kotlin 还支持扩展方法,可以给现有的类附加新的方法 (而不需要修改类的原始代码)。...△ Kotlin 推进的时间表 使用 Kotlin 更快速地编写更棒的 Android 应用,自两年前 Android 平台开始支持使用 Kotlin 语言后,我们一直在努力丰富使用 Kotlin 构建的体验和开发效率的提升...Android KTX 自从两年前 Android 平台开始支持 Kotlin 后,我们一直在努力解决 Kotlin 的兼容性问题并丰富其功能,更进一步为大家带来了许多工具来进一步提高开发效率,比如 Android...) return listener } KTX: Drawables 转化为位图 将可绘制对象转化为位图是不少开发者在处理 UI 时的常用操作,在以前需要如此操作: // 位图 API fun...x Jetpack 在推荐开发者使用 Kotlin 构建应用的同时,Android 团队自己也在大规模的使用 Kotlin,比如下面要跟大家介绍的在 Jetpack 库中的 Kotlin 特性的使用:

    1.3K20

    Android基于DataBinding封装RecyclerView实现快速列表开发

    buildFeatures { dataBinding true } } 同时在插件中添加 kotlin-kapt的插件,如下: plugins { id 'com.android.application...' id 'org.jetbrains.kotlin.android' id 'kotlin-kapt' } ardf 的使用配置就完成了,点击 Sync Now同步 build.gradle...4.2.1 数据处理 类定义好后,接下来就是具体的实现,因为需要向 Adapter 中设置数据,所以需要定义一个 data 变量用于接收列表的数据源,并重写其 set 方法,代码如下: /** * 列表数据...的注解,同时在注解中声明其在 xml 可配置的对应属性的名称,其传入的数据与该方法的参数除第一个参数以外一一对应,第一个参数则应用的 View 本身;注解上还有一个 requireAll参数,表示是否需要所有属性都在...最后 基于 DataBInding 对 RecyclerView 进行封装后,在进行列表功能的开发时无需再进行重复的 Adapter、ViewHolder 的样板代码编写,让开发者能更专注于列表功能业务本身的

    2.9K30

    kotlin到底好在哪里?

    最近在学kotlin,虽然还没有像其他博主一样立马就爱上它.但是不得不说,kotlin对比起java还是有不少优势的. 1、语法简洁 首先是语法比较简洁,能不简单处理的就不啰嗦. 1.1、变量与常量 变量通过...kotlin的可空类型的时候都是以简化了判空处理的优点来介绍的.例如下面java方法中的判空处理,用kotlin只需要一行代码就可以了: public Character front(String str...= null fun click() { listener?....invoke(this) } } var btn = Button() btn.listener = { print("on click") } btn.click() 6、泛型 在java泛型中存在类型通配符...实际上看copy这个java方法,在定义的时候需要稍微思考一下才能确定哪个用super哪个用extends.但是如果你用kotlin的话想都不用想,消费者用in,生产者用out: fun copy

    1K70
    领券