Kotlin Android Extensions

替代findViewById()

虽然有几个可用的库可以为此问题提供解决方案,但是不光需要依赖额外的库,也需要为每个库注释字段View。

Kotlin Android Extensions插件允许我们获得与这些库中的一些相同的体验,而无需添加任何额外的代码或运送任何额外的运行时。

实质上,这将允许以下代码:

// Using R.layout.activity_main from the main source set
import kotlinx.android.synthetic.main.activity_main.*

class MyActivity : Activity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        textView.setText("Hello, world!")
        // Instead of findView(R.id.textView) as TextView
    }
}

textView是一个扩展于Activity的属性,它与activity_main.xml中view的类型相同

使用Kotlin Android扩展

配置依赖关系

此扩展程序是Kotlin IDEA插件的一部分。不需要安装其他插件。

需要的是在Module: appbuild.gradle文件中启用Android Extensions Gradle插件:

apply plugin: 'kotlin-android-extensions'

一旦配置好,我们可以调用相应的扩展,例如,对于这个视图:

<TextView
    android:id="@+id/hello"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Hello World, MyActivity"
    />

将会有属性命名hello:

activity.hello.setText("Hi!")

activity中效果:
[图片上传失败...(image-7e8028-1510728474371)]

如果布局文件名是activity_main.xml,将默认直接导入

kotlinx.android.synthetic.main.activity_main.*。

实现原理

Kotlin Android Extensions是Kotlin编译器的插件,它做两件事情:

在每个Kotlin内添加一个隐藏的缓存功能和一个字段Activity。方法很小,所以它不会增加APK的大小。
用函数调用替换每个合成属性调用。
这是如何工作的呢,当调用合成属性时,接收方是模块源中的Kotlin Activity / Fragment类,缓存函数被调用。例如

class MyActivity: Activity()
fun MyActivity.a() { 
        this.textView.setText(“”) 
}

MyActivity内部生成隐藏的缓存功能,因此我们可以使用缓存机制。

但在以下情况下:

fun Activity.b() { 
    this.textView.setText(“”)     
}

我们不知道这个方法是否仅在Activities或普通Java Activities中被调用。因此,即使上一个示例中的MyActivity实例是接收器,我们也不使用缓存。


本文已经同步到我的个人博客:传送门

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 作为一个iOS 杀过来的Android,直接上手Kotlin,一个小问题可能就得被玩死,比如这个kotlin-an...
    hehtao阅读 13,479评论 1 2
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,037评论 25 709
  • 在一篇的Kotlin for Android的环境搭建中,已经简单介绍了怎么在AS中配置Kotlin的开发环境,其...
    西红柿的眼泪阅读 11,242评论 2 2
  • 一连几天,一诺咳的很厉害,实在扛不住就去医院吊水。 开始没有床位,打电话给一个在医院工作的朋友,床位马上就出现了。...
    桃花流水宝二爷阅读 2,256评论 0 1
  • 圣诞节没有下雪。可我依然瑟瑟发抖。 昨晚的平安夜,今天的圣诞节。除了和狒狒吃了一次饭,两天都在寝室。看书,玩手机,...
    木易寂欢阅读 2,738评论 0 0

友情链接更多精彩内容