Intent的使用
2021-06-17 本文已影响0人
别看后面有人
一、Intent在activity之间的使用
Intent是Android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同的组件之间传递数据。
在Activity的启动中可以分为两种:显式Intent和隐式Intent
1.显式Intent
val intent=Intent(this,SecondActivity::class.java)
startActivity(intent)
2、隐式Intent
在第二个activity的清单文件中定义action和category
<activity
android:name=".SecondActivity"
android:label="@string/title_activity_second"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="com.app.activitytest.ACTION_START"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
在action中指明当前activity可以响应com.app.activitytest.ACTION_START这个action需要和category匹配才能使用,android.intent.category.DEFAULT是一种默认的category,在调用startActivity()方法的时候会自动将这个category添加Intent中
button.setOnClickListener {
val intent=Intent("com.app.activitytest.ACTION_START")
startActivity(intent)
}
3.向下一个activity传递数据
button.setOnClickListener {
val text="hello first"
val intent=Intent(this,SecondActivity::class.java)
intent.putExtra("extra_data",text)
startActivity(intent)
}
接收代码:
val extraData=intent.getStringExtra("extra_data")
Log.d("second","get result $extraData")
4、返回数据给上一个Activity
返回上一个activity只需要按一下back键,或者代码通过finish实现,启动activity还有一个startActivityForResult()方法,
val intent=Intent(this,SecondActivity::class.java)
startActivityForResult(intent,1)
第二个activity代码:
button2.setOnClickListener {
val intent=Intent()
intent.putExtra("data_result","hell0 first")
setResult(Activity.RESULT_OK,intent)
finish()
}
在第一个activity中重写onActivityResult()方法
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when(requestCode){
1 -> if (resultCode== Activity.RESULT_OK){
val resultData=data?.getStringExtra("data_result")
Log.d("result", "onActivityResult: $resultData")
}
}
}