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

相关阅读更多精彩内容

友情链接更多精彩内容