Kotlin学习之旅(D9)

编程入门 行业动态 更新时间:2024-10-08 10:51:41

Kotlin学习<a href=https://www.elefans.com/category/jswz/34/1770100.html style=之旅(D9)"/>

Kotlin学习之旅(D9)

Kotlin学习之旅第九天

今天的主题是 - -Android Extensions

前言

Kotlin学习之旅(D1)-学习计划&基本语法

Kotlin学习之旅(D2)-基本语法

Kotlin学习之旅(D3)-类与继承

Kotlin学习之旅(D4)-函数与Lambda表达式

Kotlin学习之旅(D5)-高级语法

Kotlin学习之旅(D6)-Kotlin Idioms part 1

Kotlin学习之旅(D7)-Kotlin Idioms part 2

Kotlin学习之旅(D8)-From Java to Kotlin

Android Extensions 是什么

Kotlin Android Extensions 是 Kotlin 团队开发的一个插件,目的是让我们在开发过程中可以减少代码的编写量。主要的功能就是:视图绑定

在Java中,我们经常要写的一句代码就是 findViewById(),但是在一个Layou有许多View存在的情况下,重复写这句代码不仅工作量大,而且可读性差,因此各路大神发挥智慧,推出了许多的第三方库,其中最著名的就是ButterKnife了 ,但是使用ButterKnife有个不好的地方,就是需要定义成员变量,代码量和原生的方式差不多。

现在 Kotlin Android Extensions 能够提供与这些开源库功能相同的体验,并且不需要添加任何额外代码。

Android Extensions 怎么用

1.在Moudle中的build.gradle文件添加插件配置
apply plugin: 'kotlin-android-extensions'
2. 在View中引入资源文件
import kotlinx.android.synthetic.main.activity_main.*
3.访问id
import kotlinx.android.synthetic.main.activity_main.*class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)// 1btn_login.setOnClickListener {Toast.makeText(this@MainActivity,"Android Extensions test",Toast.LENGTH_SHORT).show()}}
}
  1. 通过btn_login.setXXX 的方式来访问view,并且调用view相关方法,不需要写findViewById()
import格式

import格式是这样的:kotlinx.android.synthetic.main.布局名称.*。需要注意的是include进来的布局,也是需要通过import导入相应布局,这样才能正常使用。

ViewHolder 使用Extensions

刚开始的时候Extensions是不支持在ViewHolder中使用视图绑定的,因此还是需要些findViewById,但是从Kotlin 1.1.4起,Extensions加入了增强功能,由于这项功能还未正式发布,因此需要开启实验标志

####1.开启experimental

在Module的build.gradle文件中设置:

androidExtensions {experimental = true
}
2.编写ViewHolder
import android.support.v7.widget.RecyclerView
import android.view.View
import kotlinx.android.extensions.LayoutContainer
import kotlinx.android.synthetic.main.activity_main.*class ViewHolder constructor(override val containerView: View?): RecyclerView.ViewHolder(containerView),LayoutContainer {   // 1fun setContent(str: String) {helloTv.text = str   // 2}
}
  1. 实现LayoutContainer
  2. 使用helloTv.text
3. 什么是LayoutContainer

在Activity,Fragment,View中我们知道import对应的layout就可以了,但是像ViewHolder这些特殊的,我们就需要通过实现LayoutContainer接口,接口返回一个containerView,按照字面意思理解就是内容视图,这个containerView就包含了ViewHolder里面的所有子View,因此可以直接使用view.setxxx / view.property 的写法

Android多渠道版本

Android Extensions 插件支持Android 多渠道版本,假如在你的build.gradle中有一个名为free的版本

android {productFlavors {free {versionName "1.0-free"}}
}

然后你就可以通过如下方式导入针对free/res/layout/activity_free.xml的所有生成的属性。

import kotlinx.android.synthetic.free.activity_free.*

内部原理

Kotlin Android Extensions 是一个Kotlin编译器插件。它执行下面两个操作:

  1. 为每一个Kotlin Activity添加一个隐藏的缓存方法和一个域。这个方法相当之小,基本不会增加APK 的大小。
  2. 用方法调用替换每一个属性调用。

例如:

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

总结

Kotlin Android Extensions 的主要功能其实就是视图绑定,但是这一个功能也可以减少许多重复代码的编写,因此有机会还是把这个插件用上吧~

Day 9 - Learn Kotlin Trip, Completed.


更多推荐

Kotlin学习之旅(D9)

本文发布于:2024-03-08 00:10:18,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1719321.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:之旅   Kotlin

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!