R.array.linxia_province_item, R.array.xinjiang_province_item }; } 这里面只写一部分了 多个地级市,县城你自己加吧 接下来就是代码中搞定了...Spinner进行初始化把,参数分别是Spinner对象,适配器,数据集,默认位置 因为在设置联动的时候都是根据上一个Spinner选择的值 id来决定下一个Spinner的值 接下来就先贴代码了 ...> arg0) { } }); } 这里面最重要的就是select代码了 注意最后一个参数的作用 position 他就是用来设置默认值的 后面就简单了,分析从服务器中返回的数据,...市的代码,你可能会认为,为什么上面不根据名称直接去获取市的代码,那你想多了,你可以看看我的根据array构造数组的时候怎么调用id值的 /** * 根据省 市代码 来获取 县的代码 * @...,那位看客又更好的方法没有,中国低级县区太多了,至少有2800个左右吧,我也想不出来怎么用代码更好的找到每个县的代码 到此基本就完成了认为,运行下就解决了问题 其中解析那里用的是 当前类的私有变量
如果我今天被问到如何区别开发Android应用程序与其他领域开发时,我会毫不犹豫地回答,以原生方式在不同硬件上执行相同应用程序可能会是其中原因之一;但…这怎么可能?...我想我还是通过解释Kotlin语言的好处来开始我的这篇文章吧。 在这一点上,没有人惊讶地看到相同的web应用程序运行于任何设备,任何平台(Android、iOS、 Windows、MacOS…)。...正是由于这些原因,今天,Java被认为至少在Android开发中,并没有以行业的速度发展。...Kotlin是由Jetbrains设计和开发的一种语言,这种语言还在不断的进化中,最重要的是,它可以在JVM上执行。这使它成为Android应用的完美候选者。...collection.map { item -> aTransformation(item) } Type nullability:在Kotlin中,由于有对optionals的集成支持,我们的代码中应该有最小可能的
和 ButterKnife 需要在代码中声明很多变量,其他几种方案代码简洁度较好; 2、编译检查: 编译期间主要有两个方面的检查:类型检查 + 只能访问当前布局中的 id。...只支持 Kotlin 语言; 5、收敛模板代码: 基本上每种方案都带有一定量的模板代码,只有 Kotlin Synthetics 的模板代码是较少的。...ViewBinding 与 Kotlin 委托双剑合璧 到这里,ViewBinding 的使用教程已经说完了。但是回过头看,有没有发现一些局限性呢?...那么,有没有可优化的方案呢?我们想起了 Kotlin 属性委托,关于 Kotlin 委托机制在我之前的一篇文章里讨论过:Kotlin | 委托机制 & 原理[7]。...在老版本 Java 中,传递代码块需要使用匿名内部类实现,而使用 lambda 表达式甚至连函数声明都不需要,可以直接传递代码块作为函数值; 问题 6、Fragment::requireView 是什么
序 自从 Google 宣布 Kotlin 为 Android 一等公民的身份后,大量的 Android 开发开始接触和使用 Kotlin,也体会到 Kotlin 在编码过程中的便捷和高效。...Kotlin 干掉了 findViewById 2.1 如何使用? 想使用这个特性,还需要一些简单的配置,不过在 Android Studio 中,我们支持 Kotlin 的时候就已经自动配置完成。...apply plugin:'kotlin-android-extensions' 之后在访问的 Activity 或者 Fragment 中,还需要对布局进行 import,通常我们在首次使用该布局下的...以前在 Kotlin 写法还很混乱的时候,我甚至看到过这样的代码。...2.2 在 Activity 中的实现 我们知道,无论 Kotlin 干了什么,最好的办法是直接查看 Bytecode 来分析其原理。
对于程序员来说,赚钱最简单有效的办法就是提升自己的技术,学习永远是最廉价最有效地提升自己地方法。...9.kotlin ?的原理 10.在项目中有直接使用tcp,socket来发送消息吗 11.如何在网络框架里直接避免内存泄漏,不需要在presenter中释放订阅 12.生命周期都是通过什么调用的?...11.kotlin lazy使用,lazy viewmodel 12.有没有看一下Google官方的ViewModel demo 13.ViewModel在Activity初始化与在Fragment中初始化...8.动画连续调用的原理是什么? 9.做过一些SDK的操作吗? 10.协程可以在Java项目中使用吗? 11.SharedPreference原理?读取xml是在哪个线程?...4.kotlin空安全的原理是什么? 5.性能优化做过什么工作?有用过什么工具?有没有精确测量的工具? 6.kotlinc与javac编译字节码有什么区别? 7.你在团队中是怎样一个角色?
1、Hello, Kotlin 1.1 Kotlin的身世 写了许久 Java,有没有发现其实你写了太多冗余的代码? 后来你体验了一下 Python,有没有觉得不写分号的感觉真是超级爽?...需要说明的是,这段代码是我从《Kotlin for Android Developer》的示例中摘出来的。...通常我们在 Java 中会自定义一些 LogUtils 类来打日志,或者直接用 android.util.log 来输出日志,不知道大家是什么感受,我反正每次因为要输入 Log.d 还要输入个 tag...嗯,这里需要简单介绍 Kotlin 在泛型中的一个比较重要的增强,这个在 Java 中无论如何也是做不到的:inline、reified。...不过用 Kotlin 的 Android 扩展插件,我们就可以这样: 先上布局文件: main.xml ? 在 Activity 中: ?
这方面的问题在 Kotlin 中显得更加有趣,因为 Kotlin 最终会编译为 Java 字节码,但是它却提供了 Java 所没有的功能。那么 Kotlin 是怎么做到的呢?这些功能有没有额外开销?...事实上,有三个编译器参与了 Android 应用中 Kotlin 代码的编译。 1. Kotlin 编译器 Kotlin 编译器将会首先运行,它会把您写的代码转换为 Java 字节码。...无论在 Java 还是 Kotlin 中,枚举的功能和消耗本质上都是一样的。有趣的地方在于引入了 R8 之后,我们能对其中的一些开销做些什么。 枚举本身不包含任何隐藏开销。...假设您的一个库中包含了一个枚举,而您改变了这个枚举中值的顺序,您就可能破坏了某个人的应用。虽然这些代码除了顺序,看起来完全相同,但就是这种顺序的不同导致了对其它代码的影响。...在本例中,就会生成很多代码。
1.1 Kotlin的身世 写了许久 Java,有没有发现其实你写了太多冗余的代码? 后来你体验了一下 Python,有没有觉得不写分号的感觉真是超级爽?...需要说明的是,这段代码是我从《Kotlin for Android Developer》的示例中摘出来的。...通常我们在 Java 中会自定义一些 LogUtils 类来打日志,或者直接用 android.util.log 来输出日志,不知道大家是什么感受,我反正每次因为要输入 Log.d 还要输入个 tag...不过用 Kotlin 的 Android 扩展插件,我们就可以这样: 先上布局文件: main.xml ? 在 Activity 中: ?...Kotlin 有办法可以解决这个问题,那就是 DSL 了。下面给出一个例子: ? 一个 LinearLayou t包含了一个 Button,这段代码你可以直接写到你的代码中灵活复用,就像这样: ?
显然在 Kotlin 当中这是不可以的,因此我们要想办法把字符串字面量的单引号统一改成双引号。...and Comments,表示我们只匹配代码部分 在输入框后面选择 ....*,蓝色高亮表示启用正则匹配 你可以检查一下匹配框当中有没有错误匹配的内容,有的话,再调整一下正则表达式即可。至少在我们的这个示例当中,前面输入的这个正则表达式够用了。...全局正则为方法调用加括号 在这里,匹配框输入正则表达式 (\w+) (([^=\{\s]+)(.*)),替换框中填写 1(2),其他配置与前面替换引号一样。...因为经过前面两部操作,settings.gradle 当中的这一行代码已经是合法的 Kotlin 代码了。
(2)Kotlin 还可以编译成 JavaScript,允许你在浏览器中运行 Kotlin 代码。...此类函数在输入相同时会产生同样的结果,并且不会修改其他对象的状态,也不会和外面的世界交互。...比相应的命令式风格的代码更优雅、更简练,因为把函数当作值可以让你获得更强 大的抽象能力,从而避免重复代码。...代码中的对他们的调用也会得到更新 - 重构kotlin方法的时候,java代码中的对他们的调用也会得到更新 四、Kotlin的编译过程 Kotlin的源代码存放在后缀名为.kt的文件中...HTML和持久化 在安卓上也可以完美支持,为常见的Android开发提供了Kotlin友好的函数 他完全免费和开源,全面支持主流的IDE和构建系统 Kotlin务实、安全、简洁、与java可互操作,支持紧凑和易读的代码
如果Android Studio是从低版本升级到2.3,可能会出现编译问题,具体解决办法参见博文《Android Studio升级到2.3的编译问题解决办法》。...然后会弹出插件库的浏览窗口,在该页面左上角的搜索框中输入“Kotlin”,下方的插件列表会定位到符合搜索条件的插件位置,单击“Kotlin”(LANGUAGES)这行,窗口右侧就展示Kotlin插件的详细信息...Kotlin代码。...代码转换完毕,原来的MainActivity.java变成了MainActivity.kt,文件内容也变成了如下所示的Kotlin代码: class MainActivity : AppCompatActivity...怎么样,这可是一个货真价实的用Kotlin开发的App噢,都说万事开头难,搭建好Kotlin的开发环境,只是万里长征的第一步,在下一篇文章中,我们将继续学习如何使用Kotlin进行Android开发。
kotlin-android-extensions三宗罪 内存问题 通过反编译kotlin-android-extensions的代码,你就会发现,通过kotlin-android-extensions...,它会在代码中创建一个HashMap,用来存放所有的id和对应的View的缓存,如果缓存中没有需要的View,那么就通过findViewById去创建,否则就直接获取,这就是它的原理。...其实没什么区别,这是为了在Kotlin中将不可空类型置空的一种妥协方式,同样的代码逻辑,在Java中,就会非常简单了。...利用kotlin-android-extensions,我们可以借助LayoutContainer来在ViewHolder中直接使用View id,那么在ViewBinding中,使用方式就更简单了。...目前还未找到现有项目从kotlin-android-extensions迁移到ViewBinding的好办法,如果当前的项目大量使用kotlin-android-extensions,那么迁移起来,就是一个巨大的工程
它们每个都以不同的方式降低了可见性。 Day 2:Elvis 操作符 需要处理代码中的空值?可以使用 elvis 操作符,避免您的 “空情况” (null-erplate)。...Day 13:从 Java 编程语言调用 Kotlin 在同一个项目中使用 Kotlin 和 Java?您有没有顶级功能或属性的课程?默认情况下,编译器将生成类名称 YourFileKt。...Day 17:Lateinit Android 中,在 onCreate 或者其它的回调初始化对象,但在 Kotlin 中不为空的对象必须初始化。那么怎么办呢?可以输入 lateinit。...Android KTX 具有一系列功能,可以使您的代码在使用图形包中的类时更加简洁。 Day 28:Sequences, lazy 和 generators 序列是从未存在的列表。...Android KTX 允许您使用默认参数在视图的一侧设置填充。一行代码可以节省很多代码!
自我介绍,公司产品介绍,负责哪一块; 写博客的意义,为什么开始写博客,还问了“简书程序员优秀作者”这个 title 怎么搞到的,哈哈哈; Kotlin 和 Java 相比,有哪些优点,有没有在实际项目中使用...Kotlin 特性,和 Java 相比有什么不同的地方; MVP 架构中 Presenter 定义为接口有什么好处; Jenkins持续集成; Android 插件化的原理; Handler 、MessageQueue...的相同和不同点,在 item 回收上有什么不同; View 事件分发机制; 说说 apk 打包流程; 有没有做过 apk 多渠道打包; Android 组件化的原理,还有一些组件化平时使用的问题; Binder...有没有了解过; HashMap 的存储原理; Kotlin 特性,和 Java 相比有什么不同的地方; Android Framework层有没有了解过,说说 Window 窗口添加的过程; Window...没办法,继续干,又约在了工作日晚上面试。 项目介绍,负责内容等; HTTPS 的原理; HTTP 2.0 有没有了解过; 讨论技术和业务哪个重要; Android 热修复原理; 剩下的记不住了...
数组和链表的区别 数组:是将元素在内存中连续存储的; 它的优点:因为数据是连续存储的,内存地址连续,所以在查找数据的时候效率比较高; 它的缺点:在存储之前,我们需要申请一块连续的内存空间,并且在编译的时候就必须确定好它的空间大小...2).多线程相关的匿名内部类和非静态内部类匿名内部类同样会持有外部类的引用,如果在线程中执行耗时操作就有可能发生内存泄漏,导致外部类无法被回收,直到耗时任务结束,解决办法是在页面退出时结束线程中的任务。...,导致handler无法被回收,如果handler是非静态的,就会导致它的外部类无法被回收,解决办法是1.使用静态handler,外部类引用使用弱引用处理2.在退出页面时移除消息队列中的消息。...5).静态View导致泄漏使用静态View可以避免每次启动Activity都去读取并渲染View,但是静态View会持有Activity的引用,导致无法回收,解决办法是在Activity销毁的时候将静态...帮你在现在的基础上,重新梳理和建立 Android 开发的知识体系。
= -1){ //做一些操作 } 上面代码看上去很简单,定义了一个 User类型的属性mUser,是可以为null的。在if条件中通过判断年级是否等于-1 来做一下操作。...我们在写这段代码的时候想的可能是:当mUser不为null,而且年级不是-1的时候,通过条件判断,然后做一下操作。 但是在kotlin中,当mUser为null时,mUser?....对于 Null 的检查是 Kotlin 的特点之一。强制你在编码过程中考虑变量是否可为 null,因此可以避免很多在 Java 中隐藏的 NullPointerException。!!...下面给大家减少及个避免 !! 的方法: 3.1、用 val 而不是 var 在 Kotlin 中 val 代表只读,var 代表可变。建议尽可能多的使用 val。...3.2、使用 lateinit 有些情况我们不能使用 val,比如,在 Android 中某些属性需要在 onCreate() 方法中初始化。
同步 IME 动画 不知道你有没有吐槽过 Android 的输入法动画,你可以现在打开微信中某个好友的聊天页面,点击输入框弹出软键盘,然后上下滑动聊天记录列表,输入法会迅速消失。...Android 11 中的可空性 我们都知道 Kotlin 的类型系统保障了 空安全 ,让我们得以书写更加安全的代码。...但是在 SDK 中并不是所有代码都是 Kotlin 写的,那么如何保证 Java 代码的空安全呢? 答案就是 注解。...,而 R8 帮助我们避免了这些不必要的开销。...在 Android 11 中,将不再允许用户授权访问 Downloads 的根目录、每个可用 SD 卡的根目录以及其它应用的目录。
为了避免操作完读写流忘记close,java和kotlin两种编程语言分别给我们提供了以下语法糖:1....使用kotlin中的use()扩展kotlin针对Closeable(实现了AutoCloseable)接口提供了下面的扩展:我们常见的InputStream、OutputStream 、Scanner...在Android P以下自然可以通过反射调用,但是在Android P及以上使用反射就会报错,所以还得探索一种高版本能够成功反射系统非公开api的方法。四....api;借助于系统类方法去调用系统非公开api,即双反射实现机制;这里我们不做过多的讲解,详细内容可以参考weishu大佬的文章:另一种绕过 Android P以上非公开API限制的办法。...,本身Android官方是禁止使用这些非公开api的,所以为了应用的稳定性,建议大家只在debug环境下使用上述逻辑。
1 避免使用自带的插件转换代码 想必 IDE 里面的插件 "Covert Java File To Kotlin File" 早已被大家熟知,要是不知道的小伙伴,赶紧写个 Java 文件,尝试点击 Android...这是 Kotlin 在 Android 开发中的很牛逼的一大特性,想必不少小伙伴都被此 Android 的 NullPointException 困扰许久。我们直接转换 Java 文件造成的各种 !!...大家也要尽量的避免这种情况。 3 应该好好注意一下伴生对象 伴生对象通过在类中使用 companion object 来创建,用来替代静态成员,类似于 Java 中的静态内部类。...5 by lazy 和 lateinit 相爱相杀 在 Android 开发中,我们经常会有不少的成员变量需要在 onCreate() 中对其进行初始化,特别是我们在 XML 中使用的各种控件,而 Kotlin...,保证该值只在一个线程中计算,并且所有线程会得到相同的值。
这个事实可能不太符合我们的直觉,但你这样想一下:在我们看到的各种性能优化规范里,你有没有见过类似「少写几个方法来减少调用栈」这样的优化策略?没有吧?为什么?因为这种优化没有意义。...因为 Java 并没有对函数类型的变量的原生支持,Kotlin 需要想办法来让这种自己新引入的概念在 JVM 中落地。而它想的办法是什么呢?...也就是说,在我对代码做了刚才那种修改之后,程序在每次调用 hello() 的时候都会创建一个对象来执行 Lambda 表达式里的代码,虽然这个对象是用一下之后马上就被抛弃,但它确实被创建了。...因为这种优化会导致函数中的函数类型的参数无法被当做对象使用,也就是说,这种优化会对 Kotlin 的功能做出一定程度的收窄。而当你需要这个功能的时候,就要手动关闭优化了。...那岂不是我每次写这种代码都得钻到原函数里去看看有没有 inline 关键字,才能知道我的代码会怎么执行?那这也太难了吧!
领取专属 10元无门槛券
手把手带您无忧上云