Kotlin学习笔记

kotlin学习笔记——Kotlin Android Exten

2017-09-28  本文已影响59人  chzphoenix

Kotlin学习笔记系列:http://blog.csdn.net/column/details/16696.html

Kotlin Android Extensions是另外一个团队开发的,它是一个插件所以不需要依赖别的库。当前仅仅包含view的绑定,会自动创建很多属性让我们直接访问xml中的view,我们就不需要明确的去布局中找这些view了。
自动创建的属性的名字来源于view的id,所以我们取id的时候要十分小心。这些属性类型也是从xml中获取的,所以不必再做类型转换。
Kotlin Android Extensions具有缓存功能,避免每次使用属性都重新获取一次。但是缓存功能目前只在activity和fragment中有效,如果在扩展函数中则跳过缓存。

使用Kotlin Android Extensions
一、首先加入插件的依赖,在module中的build.gradle中(注意不是root下的):

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'org.jetbrains.kotlin:kotlin-android-extensions:1.1.2-4'
    }
}

二、import进代码中:

1、activity和fragment的Android Extensions

import kotlinx.android.synthetic.activity_main.*

以kotlinx.android.synthetic开头,activity_main是layout的名字(注意:新版本前面要加上main,既.main.activity_main.)。
当调用了setContentView之后就可以直接使用自动创建的view的属性了。
注意:如果在layout中使用include,那么必须将include的layout也import进来。

2、view的Android Extensions
有很多代码需要访问xml中的view,比如自定义view或者adapter。绑定一个view到另外一个view,这时需要import
如:

import kotlinx.android.synthetic.main.item_view.view.*

class RecyclerAdaper(var items: List<String>, var listener: (String) -> Unit) : RecyclerView.Adapter<RecyclerAdaper.ViewHolder>(){
    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.bind(items[position])
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        return ViewHolder(View.inflate(parent.context, R.layout.item_view, null))
    }

    override fun getItemCount(): Int {
        return items.size
    }

    class ViewHolder(view: View) : RecyclerView.ViewHolder(view){
        fun bind(str: String){
            itemView.nametext.text = str
        }
    }

}

注意import进来的不是layout了,而是layout.view,这样就可以直接使用这个view的子view了。

三、直接在代码中使用
如:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>

</RelativeLayout>

MainActivity.java

import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : Activity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        //var recyclerview = findViewById(R.id.recyclerview) as RecyclerView
        //var recyclerview: RecyclerView = find(R.id.recyclerview)
        recyclerview.layoutManager = LinearLayoutManager(this)

可以看到直接使用recyclerview这个变量,不必在使用find代码,节省了大量的代码

上一篇下一篇

猜你喜欢

热点阅读