按照上文《Android开发——intent在活动间穿梭》继续写代码
一、向下一个活动传递数据
1、代码示例
使用puaExtra()
方法重载,将数据暂存在intent
中,写一个活动去除这个数据即可。比如从FirstActivity
传递字符串:
public void onClick(View v) {
String data = "我是FirstActivity传递过去的数据";
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("extra_data", data);
startActivity(intent);
}
上面的代码显式方式启动了SecondActivity
,并携带了键值为extra_data
字符串。接下来SecondActivity
通过getStringExtra()
取出:
public void onClick(View v) {
Intent intent = getIntent();
String Data = intent.getStringExtra("extra_data");
Toast.makeText(SecondActivity.this, Data, Toast.LENGTH_SHORT).show();
}
2、运行实例
可以看到接收过来的数据。
二、向上一个活动返回数据
销毁当前活动并返回上一个活动可以通过按下back
或finish()
方法。现在再介绍一个启动intent
方法——startActivityForResult()
,这个方法能在创建的活动销毁时返回一个结果给上一个活动。
1、代码示例:通过按钮返回
(1)上一个活动
startActivityForResult()
接收两个参数:第一个参数是intent
,第二个参数是请求码,用于之后的回调中判断数据的来源。
继续修改FirstActivity
的按钮监听器:
public void onClick(View v) {
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivityForResult(intent, 1);
}
请求码,是个唯一值就行,必须填个整数。
(2)下一个活动
接下来写SecondActivity
的按钮监听器:
public void onClick(View v) {
// Intent intent = getIntent();
// String Data = intent.getStringExtra("extra_data");
// Toast.makeText(SecondActivity.this, Data, Toast.LENGTH_SHORT).show();
Intent intent = new Intent();
intent.putExtra("data_return", "来自SecondActivity的数据");
setResult(RESULT_OK, intent);
finish();
}
可以看出,又新建了一个intent
,这个intent
只是携带了数据,只是为了携带数据,然后通过setResult()
方法向上一个活动返回数据:
- 第一个参数一般使用
RESULT_OK
或RESULT_CANCELED
- 第二个参数将
intent
传递回去
最后通过finish()
销毁当前活动。
(3)上一个活动
startActivityForResult()
启动了下一个活动,那么在下一个活动销毁时就会回调上一个活动的onActivityResult()
方法。
所以需要重写该方法:
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
switch (requestCode){
case 1:
if (resultCode == RESULT_OK){
assert data != null;
String returnedData = data.getStringExtra("data_return");
Toast.makeText(FirstActivity.this, returnedData, Toast.LENGTH_SHORT).show();
}
break;
default:
}
super.onActivityResult(requestCode, resultCode, data);
}
onActivityResult()
这个方法带有三个参数:
-
requestCode
:启动活动时的请求码,用来判断数据来源 -
resultCode
:返回数据的处理结果 -
data
:即返回的Intent
2、运行实例:通过按钮返回
可以看待数据成功返回
3、代码示例:通过按键返回
如果用户直接按下back
键返回怎么办?在下一个活动中重写 onBackPressed()
即可:
@Override
public void onBackPressed() {
Intent intent = new Intent();
intent.putExtra("data_return", "通过按键返回SecondActivity的数据");
setResult(RESULT_OK, intent);
finish();
}
4、运行实例:通过按键返回
完成!