Kotlin Android Extensions

在一篇的Kotlin for Android的环境搭建中,已经简单介绍了怎么在AS中配置Kotlin的开发环境,其实很简单的。今天我们来一起学习,Kotlin团队开发的一个插件Kotlin Android Extensions,这插件可以让我们用更少的代码来开发程序,目前仅仅包括了view的绑定,该插件自动创建了很多的属性来让我们直接访问XML中的view,省去了开发者findViewById。我们在使用Java时,findViewById是比较麻烦的,通过控件的ID来查找控件,当然也有第三方框架ButterKnife,Dagger等来减少findViewById的使用,通过插件自动生成,但在使用Kotlin时,便不必如此。

我们可以看一下通过用Kotlin扩展函数的原理和好处,该插件会代替任何属性调用函数,比如获取到view并具有缓存功能,以免每次属性被调用都会去重新获取这个view, 这个缓存装置只会在Activity或者Fragment中才有效。ButterKnife类似的库,在运行时,需要对每一个控件进行注解。Kotlin的扩展函数提供类似于这些库的相同体验,但不需要额外的代码和运行时间。减少findViewById的使用的同时,没有产生额外的代码,也不用在运行时对每个控件进行注解。

用Kotlin for Android也很简单只要在AndroidStudio项目中build.gradle中增加了这个依赖;

image.png

然后在项目中的app中的gradle中添加apply plugin: 'kotlin-android-extensions',把这个插件功能打开,编译一下就可以了。

image.png

在Activity、Fragment、Adapter中使用该插件都只需要一句话即可,import kotlinx.android.synthetic.main.<layout>.*。

下面通过一个简单的实例进行演示,我们用改插件给一个包含RecyclerView的页面,绑定数据展示结果。首先我们新建一个kotlin activity页面代码如下

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.support.v7.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.activity_recycler.*

 class RecyclerViewActivity : AppCompatActivity() {
    var adapter:KotlinRecyclerViewAdapter ?= null
   var list =ArrayList<String>()
   override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_recycler)
    initView()
}
fun initView() {
    for (i in 0 ..20){
        list.add("西红柿的眼泪" + i)
    }
    recycler_view.layoutManager = LinearLayoutManager(this)
    adapter = KotlinRecyclerViewAdapter(this,list)
    recycler_view.adapter =adapter
}}

适配器的源码

import kotlinx.android.synthetic.main.kotlin_itemview.view.*
class KotlinRecyclerViewAdapter(val context:Context,val list:List<String>):RecyclerView.Adapter<KotlinRecyclerViewAdapter.KotlinRecyclerHolder>(){
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): KotlinRecyclerHolder {
    return KotlinRecyclerHolder(LayoutInflater.from(context).inflate(R.layout.kotlin_itemview,parent,false))
}
override fun onBindViewHolder(holder: KotlinRecyclerHolder, position: Int) {

    val s=list.get(position)
    holder.itemView.tv_recycler_item.text=s;
}

override fun getItemCount(): Int {

    return list.size
}
class KotlinRecyclerHolder(itemView:View?):RecyclerView.ViewHolder(itemView) {
}}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值