使用功能Intent在活动之间传递数据

使用Intent在传递数据,可以理解为Intent内部有一个Map集合,通过键值对存储数据,然后再在另一个活动中从Intent对象中取出数据
向下一个活动传递数据 Intent对象中有一个重载方法:putExtra()方法,接收两个参数,第一个参数是键,第二个参数是值,第二个也就是要传递的数据.
存储数据的事例:
Intent intent = new Intent(FirstActivity.this, SecondActivity.class); intent.putExtra("extra_data", "Hello World"); startActivity(intent);

拿取数据的事例:
Intent intent = getIntent(); //获取到启动该活动的Intent String data = https://www.it610.com/article/intent.getStringExtra("extra_data"); //通过键取值

返回数据给上一个活动
  • 通过调用finish()方法返回上一个活动
  • 通过按下back键来返回上一个活动
Activity中有一个方法startActivityForResult(),此方法也是用于启动活动的,但这个方法期望在活动销毁的时候能够返回一个结果给上一个活动。
开启一个活动并要求返回结果:
int requestCode = 1; //请求码 startActivityForResult(intent, requestCode); //开启活动,并传递请求码

在启动的活动中,提供以下代码:
Intent intent = new Intent(); //这个Intent对象的作用只是存储数据 intent.putExtra("data_return", "Hello World"); //Intent对象存储数据 setResult(RESULT_OK, intent); //此方法专门向上一个活动返回数据 finish(); //销毁此活动

setResult()方法接收两个参数,第一个参数用于向上一个活动返回处理结果,一般只是用RESULT_OKRESULT_CANCELED,第二个参数则是把带有数据的Intent传递回去。
当我们使用startActivityForResult()方法启动另一个活动时,当另一个活动被销毁之后会回调上一个活动的onActivityResult()方法
我们在上一个活动中重写onActivityResult()方法
/** * requestCode:请求码,启动活动时传入的请求码 * resultCode:处理结果,返回数据时传入的处理结果 * data:携带返回数据的Intent对象 */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case 1: if (resultCode == RESULT_OK) { String returnedData = https://www.it610.com/article/data.getStringExtra("data_return"); } break; default: break; } }

为什么在启动活动时传入了请求码:由于在一个活动中有可能调用startActivityForResult()方法去启动很多不同的活动,每一个活动返回的数据都会回调onActivityResult()方法,因此我们首先做的是通过检查请求码requestCode的值来判断数据来源。
【使用功能Intent在活动之间传递数据】注意:当用户点击功能键back来销毁一个活动时,活动就会调用onBackPressed()方法,可以在此方法中添加代码是返回数据:
@Override public void onBackPressed() { Intent intent = new Intent(); intent.putExtra("data_return", "Hello World"); setResult(RESULT_OK, intent); finish(); }

    推荐阅读