码字不易,且看且珍惜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() { |