显示界面跳转,隐式跳转
跳转分为两个:
1:显示跳转:在同一个程序之中从一个页面跳转到另一个页面,
不带参数也不返回数据的跳转
当点击第一个页面时会跳转到第二个页面
准备两个activity
change.setOnClickListener {//change是第一个页面按钮的id,
//startActivity()是启动跳转页面的方法里面的参数
//1:intent(),是一个意图,需要告诉我们从哪个页面跳转到哪个页面
如这儿:this指当前这个页面,mainActivity2就指的是第二个页面
startActivity(Intent(this,MainActivity2::class.java))
}
带参数跳转,但不需要返回数据:
一:直接通过putExtra()进行数据的传输,从页面一跳转到页面二
页面一:
//带参数跳转
val intent = Intent(this,MainActivity2::class.java).apply {
putExtra("key1","first")//key1是对数据的一个标记,first是传输的数据,数据传输过去之后通过
key来取数据
}
change.setOnClickListener {
startActivity(intent)//通过startactivity()启动跳转
}
页面二:
取数据:直接获取intent通过getStringExtra()获取,这里传过来的是什么数据,就通过什么来取
如:这里传过来的是String类型所以通过getStringExtra()来获取,若传过来的是Int类型,则通过getIntExtra()来获取
val key = intent.getStringExtra("key1")
Log.v("lfl","$key")
这个方法要传数据只能通过putExtra()一个一个的传,也只能传系统本身存在的数据类型,如图
二:通过bundle,putExreas()来传输数据
页面一:
bundle就是将一个个的putExtra()组合在一起,就成了putExtras()
val intent = Intent(this,MainActivity2::class.java).apply {
val bundle = Bundle().apply {
putString("key1","传输的数据是:")
putInt("key2",11)
}
putExtras(bundle)
}
change.setOnClickListener {
startActivity(intent)
}
页面二:
//通过extras得到一个bundle对象
val bundle = intent.extras
//在从bundle中获取一个一个的数据,同样,bundle中传过来的是什么类型的数据就要通过获取什么样的类型数据来获取数据
字符串是getString(),整形是getInt(),key1,key2是页面一标记数据的key1,key2
val key1 = bundle?.getString("key1")
val key2 = bundle?.getInt("key2")
Log.v("lfl","$key1,$key2")//log.v()是打印,仅仅作为可检验数据是否传过来
跳转过去而且需要返回值的:
需要返回值则将startActivity()换成startActivityForResult()其他不用变
//跳转过去,同时需要从第二个页面返回数据
startActivityForResult(intent,1)//第一个参数依然是intent,第二个参数是请求码,个人将理解为对一个请求
的标记,标记对某一个界面跳转的标记如这个是将从页面一跳转到页面二标记为1,若还有个页面跳转是从页面一跳转到页面三则可
标记为2
//从第二个界面返回时
只需要返回结果:
//只返回一个结果 ,没有返回数据
setResult(1)//1是人为定的状态值,我这里1为数据传输成功,也可以定为0为传输成功
需要返回结果和数据的
通过intent将数据返回回去,intent的用法和传输过来的用法是一样的
//返回结果和数据的
Intent().apply {
putExtra("key1","传输成功")
}.also {
setResult(1,it)//1为结果状态,it是一个intent
}
//需要返回数据,同时就必须要重写以下方法 ,该方法是在界面返回时自动调用
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == 1){//判断是哪个界面的跳转
if (resultCode == 1){//判断跳转状态
//传输数据成功
//通过data将返回的数据取出 这里的data取数据用法和传输数据时,第二界面中
//intent取数据的用法是一样的
val da = data?.getStringExtra("key1")
Log.v("lfl","$da")
}else{
//传输数据失败
}
}
}
2:隐式跳转
change.setOnClickListener {
//拨打电话
//通过配置文件的意图过滤器来查找我们需要的activity
//action :动作行为
//data:传递数据
Intent().apply {
action = Intent.ACTION_DIAL
data = Uri.parse("tell:18083243099")
}.also {
startActivity(it)
}
}
3:将自己的程序也设为可以被跳转过来的程序,就需要配置自己的意图配置器
<action android:name="lfl.weichat"/> 自己写的action,lfl.weichat是根据情况改的,是对改程序的一个标识
<category android:name="android.intent.category.DEFAULT"/> 需要将category设置为default
<data android:scheme="content"/> 当需要传递数据过来时就添加data,不需要就不用添加,引号里面是传递数据的格式
获取上一个(跳转过来)的程序传递过来的数据:
intent.data?.schemeSpecificPart
若需要从该程序返回数据结果,和显示跳转的方法一样