android开发(kotlin) Intent的使用、返回数据给上一个activity
本文介绍了Android开发中Intent的两种使用方式:显式Intent和隐式Intent。显式Intent通过指定目标Activity类名实现跳转(如FirstActivity跳转SecondActivity),隐式Intent通过配置intent-filter并匹配action实现跳转(如跳转浏览器或拨号界面)。文章还详细说明了Activity间传递数据的方法,包括使用putExtra()传
·
显式intent
创建两个activity,FristActivity与SecondActivity。
从FristActivity点击按钮跳转到SecondActivity。
binding.clickButC.setOnClickListener {
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
}
注意上面的::java用法。
隐式Intent
SecondActivity配置intent-filter
<activity
android:name=".SecondActivity"
android:exported="true">
<intent-filter>
<action android:name="com.bz.yh.xd.testkotlin.second" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
FristActivity通过action跳转SecondActivity
binding.clickButC.setOnClickListener {
val intent2 = Intent("com.bz.yh.xd.testkotlin.second")
startActivity(intent2)
}
使用intent跳转系统浏览器,并打开网页。
binding.clickButC.setOnClickListener {
val intent = Intent();
intent.data = Uri.parse("http://www.csdn.net")
startActivity(intent)
}
使用intent跳转拨号界面。
binding.clickButC.setOnClickListener {
val intent = Intent(Intent.ACTION_DIAL);
intent.data = Uri.parse("tel:10086")
startActivity(intent)
}
activity间使用intent传递数据
FirstActivity
binding.clickButC.setOnClickListener {
val data = "8888888888"
val intent = Intent(this, SecondActivity::class.java)
intent.putExtra("mydata",data)
startActivity(intent)
}
SecondActivity接收参数
class SecondActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.activity_second)
val eData: String? = intent.getStringExtra("mydata")
if(eData!=null){
Log.d("SecondActivity",eData)
}
}
}
intent实际上是调用getIntent()
返回数据给上一个activity
startActivityForResult()已过时
在FirstActivity中,创建一个ActivityResultLauncher实例,使用registerForActivityResult监听结果返回。
class ClickActivity : ComponentActivity() {
lateinit var startForResult: ActivityResultLauncher<Intent>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
val binding = ActivityClickBinding.inflate(layoutInflater)
setContentView(binding.root)
startForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
// 这里是回调函数,当第二个Activity返回时调用
if (result.resultCode == RESULT_OK) {
// 这里可以处理返回的数据
val data: Intent? = result.data
val returnedValue = data?.getStringExtra("mydata")
// 使用返回的数据做些什么
Toast.makeText(this, "返回的数据: $returnedValue", Toast.LENGTH_SHORT).show()
}
}
binding.clickButC.setOnClickListener {
val intent = Intent(this, SecondActivity::class.java)
startForResult.launch(intent)
}
}
}
在SecondActivity中,设置返回数据
class SecondActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
val binding = ActivitySecondBinding.inflate(layoutInflater);
setContentView(binding.root)
binding.secondTvClick.setOnClickListener {
val returnIntent = Intent()
returnIntent.putExtra("mydata", "这是从SecondActivity返回的数据")
setResult(RESULT_OK, returnIntent)
finish()
}
}
}
更多推荐
所有评论(0)