本章节讲述Kotlin中各种View的声明赋值点击事件,比如TextView,EditText,ImageView。这些在Java语言中是最最基础的东西。写这篇文章的主要目的就是看一下Kotlin语言中有什么不同。
代码
class KotlinActivity2 : AppCompatActivity() {
//View的声明
private lateinit var textView: TextView
private lateinit var editText: EditText
private lateinit var imageView: ImageView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_kotlin2)
initView()
}
/**
* 初始化View
* */
@SuppressLint("SetTextI18n")
private fun initView() {
//View的初始化
textView = findViewById(R.id.textView)
editText = findViewById(R.id.editText)
imageView = findViewById(R.id.imageView)
//View的赋值
textView.text = "我是Kotlin的TextView"
editText.setText("我是Kotlin的EditText")
imageView.setBackgroundResource(R.drawable.ic_launcher_background)
//View的点击事件
textView.setOnClickListener {
val intent = Intent(this, MainActivity2::class.java)
intent.putExtra("name", "张三")
startActivity(intent)
}
imageView.setOnClickListener{
}
}
}
结果
初始
展示
最简单的View声明,View初始化,View赋值。没什么可讲的。下面我们对照Java语言来说一下几个区别。
一.类继承
Java
public class MainActivity extends AppCompatActivity
class关键字声明一个类 如果想继承AppCompatActivity类 使用extends关键字即可。
Kotlin
class KotlinActivity2 : AppCompatActivity()
class关键字声明一个类 如果想继承AppCompatActivity类 使用 : +类名+()。这个就是Kotlin和Java的区别。
注意
我们创建一个类时。
Java语言中默认创建的类带有public,如上。也就是默认创建的Java类是public类型的。也就是可以被其他类继承。
Kotlin语言中默认创建的类没有任何修饰符,如上。也就是说默认创建的Kotlin类是final类的。不可以被其他类继承。那么如果想把创建的Kotlin类可以被其他类继承呢?
我们可以使用open关键字。举例如下
如果KotlinActivity2类如下
class KotlinActivity2 : AppCompatActivity()
另外一个类GaoJieFun 想要继承KotlinActivity2类
class GaoJieFun :KotlinActivity2()
报错提示
即提示 KotlinActivity2类是final类型的,要想继承这个类需要把这个类改成open类型的。
修改
open class KotlinActivity2 : AppCompatActivity()
类GaoJieFun 继承KotlinActivity2类
class GaoJieFun :KotlinActivity2()
成功。
二.View声明
如上,Kotlin中声明View时都加了一个关键字lateinit。那么这个关键字可不可以不加,以及这个关键字的作用是什么呢?
1.不加lateinit关键字声明View 代码
private var textView: TextView
private lateinit var editText: EditText
private lateinit var imageView: ImageView
报错信息
也就是说,Kotlin中View的声明必须加lateinit关键字。
2.lateinit关键字的作用
lateinit关键字的作用是 推迟变量的初始化。
因为
在Kotlin中,必须在声明对象时初始化对象的属性。这意味着,当您获取类的实例时,可以立即引用它的任何可访问属性。
但是
由于Android中各种View的声明比较特殊,因为在Activity中只有在onCreate方法中调用findViewById后,各种View才可以初始化。
所以
在Kotlin中,需要一种方法来推迟 View 的属性初始化。即使用lateinit关键字。
3.lateinit关键字的其他说明
不能用来修饰基本数据类型。因为基本数据类型在声明时会有默认值,比如int类型默认0。
代码
private lateinit var m:Int = 0
报错
<2>.lateinit不能修饰val变量,只能修饰可变的属性。
代码
private lateinit var string: String
正确
代码
private lateinit val string: String
报错
<3>.总结
lateinit关键字 在Kotlin中 主要用来延时初始化View。其他的基本变量或者val常量不可以使用。其他可以使用的变量,在使用时也需要格外谨慎。个人建议只在View的声明时使用。
三.View点击事件
View的点击事件,也是非常简单的操作。我们还是看一下Java和Kotlin的区别。
Java代码
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
Kotlin代码
textView.setOnClickListener {
}
Java的语法咱们就不说了,咱们看一下Kotlin的。可见Kotlin的点击事件语法很简单。就是
view.setOnClickListener{}。然后在大括号内写具体的逻辑即可。
四.类引用
如上,简单的Intent页面跳转时
Java代码
Intent intent = new Intent(this, MainActivity2.class);
intent.putExtra("name", "张三")
startActivity(intent);
Kotlin代码
val intent = Intent(this, MainActivity2::class.java)
intent.putExtra("name", "张三")
startActivity(intent)
也就是,引入类时,Java直接使用 类名.class 即可。而Kotlin需要 类名::class.java。