一、基本变量定义方式
1、var和val的区别:
var是一个可变变量,这是一个可以通过重新分配来更改为另一个值的变量。这种声明变量的方式和java中声明变量的方式一样。
val是一个只读变量,这种声明变量的方式相当于java中的final变量。一个val创建的时候必须初始化,因为以后不能被改变。
2、在kotlin中获取xml页面的方法
首先需要在build.gradle中加入一行代码:
apply plugin: 'kotlin-android-extensions'
截图如下:
在类中可以直接使用定义的id:需要引入包即可;非常方便,本来看了kotlin半天感觉用处不大时,看到了这个方法,决心要把kotlin学下去。
import kotlinx.android.synthetic.main.activity_main.*
3、在定义变量bean时的get、set方法改为:
-
var id: String? = null//表明id是可以为null的定义方式
-
var name: String? = null
4、activity设置adapter的方式
以前的设置adapter时gridview_picture.setAdapter(adapter);改为:gridview_picture.adapter = adapter
5、kotlin中 ? 和 !! 的使用方法
(1)"?" : 表示当前对象不为空时执行的方法
(2) !!: 表示当前对象本身是可以为null的,但是在执行该段代码时确定是不为null的。
//表示b可以为空
var b: String? = "abc"
//如果b不为null,将返回b的长度,如果为null,将返回-1
val l = b?.length ?: -1
Kotlin在定义变量时是不区分类型的,系统会自动区分定义的类型
6、设置控件显示与否
textview!!.visibility=View.VISIBLE
二、点击事件
1、对点击事件进行了简化,也适用于其它监听事件,在kotlin中只有用到的方法才会调用。
//原始Java代码
view.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(), "Click", Toast.LENGTH_SHO
RT).show();
}
})
我们将把上面的代码转换成Kotlin(使用了Anko的toast函数):
view.setOnClickListener(object : OnClickListener {
override fun onClick(v: View) {
toast("Click")
}
}
view.setOnClickListener({ view -> toast("Click")
//由于view没有使用,可以直接取消view的调用
view.setOnClickListener({ toast("Click") })
//由于括号中没有参数,可以直接把小括号去掉
view.setOnClickListener { toast("Click")
2)listview使用lambdas的点击方法:
view?.tab_list!!.setOnItemClickListener({adapterView,view,i,l
->
when(i){
0 -> startActivity(MainDialogActivity::class.java, null)
}
})
在上方的adapterView、view、l、没有用到,则可以用下滑线表示,如下代码:
view?.tab_list?.setOnItemClickListener({_,_,i,_
->
when(i){
0 -> startActivity(MainDialogActivity::class.java, null)
}
})
三、类与方法的写法改变
1、kotlin中类的命名方式:
大家在定义一个类时,有时候需要定义该类的构造方法,那么在kotlin中可以直接下载类名下,如:
class MvvmModel(val view : MvvmView, val adapter : MvvmAdapter) : BaseLoadListener<User> {
特别要注意的是,用的是圆括号,如果用的是尖括号需要定义为抽象方法,代表着调用该类时需要传的值。
class Person(name: String, surname: String)
init{
}
类的继承方法:
open class Animal(name: String)
class Person(name: String, surname: String) : Animal(name)
2、Java方法调用Kotlin定义的全局类需要加上INSTANCE
GlobalData.INSTANCE.getPortal();
3、带返回值的方法
fun add(x: Int, y: Int) : Int {
return x + y
}
4、方法可通过构造默认值的方式来选择参数,避免了多个参数需要写多个方法
fun toast(message: String, length: Int = Toast.LENGTH_SHORT) {
Toast.makeText(this, message, length).show()
}
//调用方法
toast("1")
toast("1",Toast.LENGTH_LONG)
5、类中实现某个方法impletents改为“:”多个继承用逗号隔开
class MvpActivity : BaseActivity(), FindItemsInteractor.OnFinishedListener {
6、apply定义list方法
var list = mutableListOf<Int>().apply {
add(1)
add(2)
add(3)
}