Kotlin实现Android程序

文章目录


前言

本片文章主要介绍Kotlin实现Android组件中的Activity的基本用法;主要包括:Activity之间的跳转 以及Activity之间的传值


一、使用Kotlin创建Android程序

1.选择创建Kotlin语言
Kotlin实现Android程序
(2)在创建过程会出现失败问题,基本原因时Android Studio版本小了,按照提示去更新一下Android Studio
(3)创建Kotlin类,选择创建Kotlin,同时选择class
Kotlin实现Android程序
Kotlin实现Android程序

(4)创建Activity,与java1创建一样
Kotlin实现Android程序

二、Activity之间的跳转

我们创建两个Activity,MainActivity只包含一个Button按钮,SecondActiviy包含一个TextView,布局过于简单就不展示,这里只展示一个id,后面这个id会有用

android:id="@+id/button"  //Button的ID
  android:id="@+id/tv_contnet" //TextView的ID

我们想实现点击按钮跳转界面,首先我们看一下Java怎么跳转的

Java代码

 btn = findViewById(R.id.button);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent =new Intent(MainActivity.this,SecondActivity.class);
                startActivity(intent);
            }
        });

在Kotlin中,就不需要获取控件,而是直接在Activity写与id一样的值,便可得到并设置事件,通过代码提示便可知道
Kotlin实现Android程序
在创建点击事件选择第二个
Kotlin实现Android程序
Kotlin代码:

button.setOnClickListener {
    Intent(this, SecondActivity::class.java).apply {
        startActivity(this)
    }
}

可见Kotlin确实简化了代码数量,如果你对上述代码不习惯或者没用过很正常,多码就会了,就和你之前写Java一样。孰能生巧

三、Activity之间的传参

普通类型

Java传参

在这里插入代码片

Kotlin传参

传递参数

button.setOnClickListener {
    Intent(this, SecondActivity::class.java).apply {
        putExtra("name","mt")
         putExtra("age",18)
        startActivity(this)
    }
}

接受参数
这里直接通过intent 就不需要在去 像Java那样 Intent intent =getIntent()了

       var name = intent.extras?.getString("name")
     tv_contnet.text =name

非普通类型之Serializable

可以通过实现Serializable 或 Parcelable接口来实现
1.Serializable

    class SeriUser :Serializable {
    var name:String?="serializeable"
    var age:Int=1000
}

传递参数

          Intent(this, SecondActivity::class.java).apply {
             putExtra("user", SeriUser())
               startActivity(this)
           }

接受参数(需注意 需要在后面添加 as SeriUser 否则会报错)

 //        非普通类型,且时Serializable
        var serUsers =intent.getSerializableExtra("user") as SeriUser
        tv_contnet.text=serUsers.name
        

非普通类型之Parcelable

2.Parcelable


class User() :Parcelable {
    var name:String?="test name"
    var age:Int =100
    constructor(parcel: Parcel) : this() {
    //必须实现
        name =parcel.readString()
        age =parcel.readInt()
    }

    override fun writeToParcel(parcel: Parcel, flags: Int) {
    //必须实现
        parcel.writeString(name)
        parcel.writeInt(age)

    }

    override fun describeContents(): Int {
        return 0
    }

    companion object CREATOR : Parcelable.Creator<User> {
        override fun createFromParcel(parcel: Parcel): User {
            return User(parcel)
        }

        override fun newArray(size: Int): Array<User?> {
            return arrayOfNulls(size)
        }
    }
}

传递参数

            Intent(this, SecondActivity::class.java).apply {
                putExtra("user", User())
                startActivity(this)
            }

接受参数

//        非普通类型,且时Parcelable
       var user =intent.getParcelableExtra<User>("user") as User
       tv_contnet.text =user.name
上一篇:c#调用 WinRAR.exe以命令行形式实现文件、文件夹的解压缩


下一篇:Light OJ 1411 Rip Van Winkle`s Code 线段树成段更新