Kotlin教程 各种View的声明赋值点击事件详解

本章节讲述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关键字的其他说明

 <1>.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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值