文章目录
前言
本片文章主要介绍Kotlin实现Android组件中的Activity的基本用法;主要包括:Activity之间的跳转 以及Activity之间的传值
一、使用Kotlin创建Android程序
1.选择创建Kotlin语言
(2)在创建过程会出现失败问题,基本原因时Android Studio版本小了,按照提示去更新一下Android Studio
(3)创建Kotlin类,选择创建Kotlin,同时选择class
(4)创建Activity,与java1创建一样
我们创建两个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代码:
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