码字不易,且看且珍惜QAQ
向下一个Activity传递数据
Intent
在启动Activity
的时候还可以传递数据
思路很简单,可以把我们想要传递的数据暂存在Intent
中,在启动另一个Activity
后,只需要把这些数据从Intent
中取出来就行了。
比如在FirstActivity
中有一个按钮,我们想通过这个按钮将字符串"CUMT"
传入SecondActivity
中
那么就可以使用putExtra()
方法向Intent
对象中暂存数据
1 | button.setOnClickListener{ |
再在SecondActivity
中利用getStringExtra()
方法将暂存的数据取出来
1 | class SecondActivity : AppCompatActivity() { |
由于我们传递的是字符串,所以使用
getStringExtra()
方法来获取数据。
如果传递的是整型数据,则使用getIntExtra()
方法。
如果传递的是布尔型数据,则使用getBooleanExtra()
方法。
返回数据给上一个Activity
如果要通过SecondActivity
将数据传回FirstActivity
,那么就要用startActivityForResult()
方法来替代startActivity()
方法。
startActivityForResult()
方法期望在Activity
销毁的时候能返回一个数据给上一个Activity
那么我们就需要在FirstActivity
中修改启动下一个Activity
的方式:
1 | button.setOnClickListener{ |
startActivityForResult()
方法接收两个参数:
第一个参数还是Intent
对象;
第二个参数是请求码,用于在之后的回调中判断数据的来源
请求码只要是唯一值即可
然后在SecondActivity
中创建一个用于传输数据的Intent
对象,并将此对象传递到上一个Activity
,所有操作在按钮被点击后执行。
1 | button2.setOnClickListener{ |
setResult()
方法专门用于向上一个Activity
传递数据。
第一个参数用于返回处理结果,一般使用RESULT_OK
或RESULT_CANCELED
两个值。
第二个参数则把带有数据的Intent
对象传递回去。
接下来我们还需要重写FirstActivity
中的onActivityResult()
方法来得到SecondActivity
返回的数据
1 | override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { |
?.
运算符,只有当data
不为null
的时候才会调用getStringExtra()
方法
如果用户在SecondActivity
中并不是通过点击按钮返回的,而是通过系统的返回键返回。
若想在这种情况下依然返回数据,则需要重写SecondActivity
的onBackPressed()
方法来解决这个问题:
1 | override fun onBackPressed() { |