Kotlin Android Extensions

作者: 西红柿的眼泪 | 来源:发表于2017-06-08 17:11 被阅读818次

在一篇的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) {
}}

相关文章

网友评论

    本文标题:Kotlin Android Extensions

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