美文网首页
Kotlin Android Extensions

Kotlin Android Extensions

作者: 陌上初寒l | 来源:发表于2017-05-19 16:56 被阅读1298次

    替代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实例是接收器,我们也不使用缓存。


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

    相关文章

      网友评论

          本文标题:Kotlin Android Extensions

          本文链接:https://www.haomeiwen.com/subject/ufwyxxtx.html