本片文章主要介绍Kotlin实现Android组件中的Activity的基本用法;主要包括:Activity之间的跳转 以及Activity之间的传值
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 或 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
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