Activity间数据的传输-android-kotlin
码字不易,且看且珍惜QAQ
向下一个Activity传递数据
Intent
在启动Activity
的时候还可以传递数据
思路很简单,可以把我们想要传递的数据暂存在Intent
中,在启动另一个Activity
后,只需要把这些数据从Intent
中取出来就行了。
比如在FirstActivity
中有一个按钮,我们想通过这个按钮将字符串"CUMT"
传入SecondActivity
中
那么就可以使用putExtra()
方法向Intent
对象中暂存数据
button.setOnClickListener{
val intent = Intent(this,SecondActivity::class.java)
intent.putExtra("key","CUMT")//向intent中传递键值对 key--1024
startActivity(intent)
}
再在SecondActivity
中利用getStringExtra()
方法将暂存的数据取出来
class SecondActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.second_layout)
//取出对应键的值,存放到extraData变量中
val extraData = intent.getStringExtra("key")
Log.d("SecondActivity","$extraData 已经被取出")
}
}
由于我们传递的是字符串,所以使用
getStringExtra()
方法来获取数据。
如果传递的是整型数据,则使用getIntExtra()
方法。
如果传递的是布尔型数据,则使用getBooleanExtra()
方法。
返回数据给上一个Activity
如果要通过SecondActivity
将数据传回FirstActivity
,那么就要用startActivityForResult()
方法来替代startActivity()
方法。
startActivityForResult()
方法期望在Activity
销毁的时候能返回一个数据给上一个Activity
那么我们就需要在FirstActivity
中修改启动下一个Activity
的方式:
button.setOnClickListener{
val intent1 = Intent(this,SecondActivity::class.java)
//使用startActivityForResult()来启动SecondActivity
startActivityForResult(intent1,1)
}
startActivityForResult()
方法接收两个参数:
第一个参数还是Intent
对象;
第二个参数是请求码,用于在之后的回调中判断数据的来源
请求码只要是唯一值即可
然后在SecondActivity
中创建一个用于传输数据的Intent
对象,并将此对象传递到上一个Activity
,所有操作在按钮被点击后执行。
button2.setOnClickListener{
//创建一个用来存储返回数据的intent
val intent2 = Intent()
intent2.putExtra("key","CUMT")
//将存储着数据的Intent对象返回到上级Activity
setResult(Activity.RESULT_OK,intent)
//销毁Activity
finish()
}
setResult()
方法专门用于向上一个Activity
传递数据。
第一个参数用于返回处理结果,一般使用RESULT_OK
或RESULT_CANCELED
两个值。
第二个参数则把带有数据的Intent
对象传递回去。
接下来我们还需要重写FirstActivity
中的onActivityResult()
方法来得到SecondActivity
返回的数据
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when(requestCode){
1->if(resultCode== Activity.RESULT_OK){
val returnedData = data?.getStringExtra("key")
Log.d("FirstActivity","获取的数据为$returnedData")
}
}
}
?.
运算符,只有当data
不为null
的时候才会调用getStringExtra()
方法
如果用户在SecondActivity
中并不是通过点击按钮返回的,而是通过系统的返回键返回。
若想在这种情况下依然返回数据,则需要重写SecondActivity
的onBackPressed()
方法来解决这个问题:
override fun onBackPressed() {
super.onBackPressed()
//用于存储返回的数据
val intent = Intent()
intent.putExtra("key","CUMT")
//将存储数据的intent返回
setResult(Activity.RESULT_OK,intent)
//销毁Activity
finish()
}
上一篇: 如何使用C#操作幻灯片
下一篇: Django中的ORM