众所周知,intent可以用于启动Activity。其实在启动的时候,还能通过intent来传递数据,下面就来看一个实例。
向下一个Activity传递数据
第一个activity的布局文件
这里仅仅放置了一个按钮,用于启动第二个Activity。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="启动"/>
</LinearLayout>
第一个activity的代码文件
button的监听事件里启动Activity,并传递数据
package com.example.intenttest
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btn.setOnClickListener{
//使用显示Activity启动下一个Activity
val intent = Intent(this, MainActivity2::class.java)
//传递数据:一个键值对
intent.putExtra("data", "这是传递的数据")
startActivity(intent)
}
}
}
第二个Activity的代码文件
接收数据,并在Toast中显示出来。
package com.example.intenttest
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
class MainActivity2 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main2)
//获得上一个Activity传来的数据
val data = intent.getStringExtra("data")
Toast.makeText(this, data, Toast.LENGTH_SHORT).show()
}
}
向上一个Activity传递数据
使用startActivityForResult启动第二个Activity。
在第二个Activity中使用setResult给前一个Activity传递数据。
当第二个Activity销毁时,就会自动调用第一个Activity的OnActivityResult()
方法。因此我们需要重写此方法,处理返回的数据。
package com.example.intenttest
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btn.setOnClickListener{
//使用显示Activity启动下一个Activity
val intent = Intent(this, MainActivity2::class.java)
//传递数据:一个键值对
intent.putExtra("data", "这是传递的数据")
//两个形参分别是intent和请求码(保证唯一即可)
startActivityForResult(intent, 1)
}
}
//重写此党发用于处理返回的数据
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when(requestCode){
1 -> {
val return_data = data?.getStringExtra("data_return")
Toast.makeText(this, return_data, Toast.LENGTH_SHORT).show()
}
}
}
}
package com.example.intenttest
import android.app.Activity
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
class MainActivity2 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main2)
//获得上一个Activity传来的数据
val data = intent.getStringExtra("data")
Toast.makeText(this, data, Toast.LENGTH_SHORT).show()
}
//
override fun finish() {
//使用没有参数的构造函数
val intent1 = Intent()
intent1.putExtra("data_return", "这是返回的数据")
//专门用于处理返回的数据,接收两个参数。分别是请求码(一般传入RESULT_OK或者RESULT_CANCELED即可)
setResult(Activity.RESULT_CANCELED, intent1)
super.finish()
}
}