Kotlin startActivity跳转Activity实现流程详解
作者:go2coding
在Android当中,Activity的跳转有两种方法,第一个是利用startActivity(Intent intent);的方法,第二个则是利用startActivityForResult(Intent intent,int requestCode);的方法,从字面上来看,这两者之间的差别只在于是否有返回值的区别,实际上也确实只有这两种区别
从一个
Activity
跳到另一个
Activity
在编写安卓代码是最常见的事情了。我们不可能在一个页面中,把所有的事情都做完。
在
kotlin
中跳转的程序也比较简单,跟
java
差不多。如果熟悉
java
代码的话,只需要把代码改变过来而已。
带参数的调整
从一个
Activity
跳到另一个
Activity
中,如同调用函数一样,可以把数据传递给另外的
Activity
中,
Activity
在接受到这个数据后,可以根据数据的情况进行相应的处理操作。
对于跳转
Activity
,
android
中使用的是
startActivity
,在
startActivity
的时候可以传递进去一个
Intent
,这个
Intent
可以把要传递的
Activity
和参数都塞进去,使用的方法如下:
val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
var intent:Intent = Intent(applicationContext,MainActivity2::class.java)
intent.putExtra("request_time", sdf.format(Date()))
startActivity(intent)
这里我们从MainActivity
,跳到 MainActivity2
中去,我们传递的字段为request_time
,在intent
中用putExtra
放入。
在 MainActivity2
中直接用intent
的getStringExtra
来取得相关的字段。
tv_activity.setText(intent.getStringExtra("request_time"))
自定义数据传输
大多数,我们不仅仅只是想传递一个 基础类型的数据,对于自定义的类或者数据也是可以做得到的,这点Kotlin
看起来会简单多了,特别是创建Parcelable
。
创建一个自定义数据类型:
@Parcelize
data class MessageInfo(val content:String,val sent_text:String):Parcelable
@Parcelize
注解 帮我们把Parcelize
的接口都实现了。
传递数据类型,启动相关的页面:
btn_activity1.setOnClickListener{
val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
var message:MessageInfo = MessageInfo("hello MainActivity2",sdf.format(Date()))
var intent:Intent = Intent(applicationContext,MainActivity2::class.java)
intent.putParcelableArrayListExtra("request", arrayListOf(message))
startActivity(intent)
使用putParcelableArrayListExtra
把相关的数据放入。接收端同样的来接收数据类型:
var messages = intent.getParcelableArrayListExtra<MessageInfo>("request")
startActivityForResult
在跳转后的页面,如果在跳转回去的时候,也可以设置相应的回调参数,和回调状态值。在startActivity
的时候,换为startActivityForResult
,重载onActivityResult
的方法,就可以得到返回的数值。
btn_activity2.setOnClickListener {
var intent:Intent = Intent(applicationContext,MainActivity2::class.java)
startActivityForResult(intent,9)
重载onActivityResult
方法,等待返回结果:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
在 MainActivity2
页面中,用Intent
的方式来跳回原来的页面。