该代码在活动——使用显式Intent所建立的项目下运行
向下一个活动传递数据
目的: FirstActivity中有一个字符串,将字符串传递给SecondActivity中
代码:
修改FirstActivty中代码
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String data = "Hello SecondActivity";
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("extra_data", data);
startActivity(intent);
}
});
解释:
putExtra():接受两个参数
- 第一个参数:键,用于从Intent中取值。
- 第二个参数:真正要传递的数据
代码:
在SecondActivity中将传递的数据取出,并打印
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second_layout);
Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");
Log.d("SecondActivity",data);
}
}
解释:
通过getIntent()方法获得启动SecondAcitvity的Intent,然后用getStringExtra()方法,传入相应的键值,就得到了传递的数据。 如果传递的是整型数据用getIntExtra(),如果传递的是布尔型数据用getBoolExtra()方法。
getStringExtra():用来获取传递的数据。
运行结果:
点击Button 1
返回数据给上一个活动
目的:返回数据给上一个活动
代码:
修改FirstActivity中按钮的点击事件
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivityForResult(intent,1);
}
});
解释:
startActivityForResult():两个参数
- 第一个参数:Intent。
- 第二个参数:请求码,只要是唯一值就可以。
代码:
在SecondActivity中给按钮注册点击时事件,并添加返回数据的逻辑。
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("data_return", "Hello FirstActivity");
setResult(RESULT_OK, intent);
finish();
}
});
解释:
将要传递的数据存放在Intent中,然后调用setResult()方法
setResult():专门用于向上一个活动返回数据。接收两个参数。
- 第一个参数:用于向上一个活动返回处理结果,一般只使用RESULT_OK或RESULT_CANCELED。
- 第二个参数:把带有数据的Intent传递回去。
代码:
由于使用startActivityForReslut()方法启动SecondActivity的,在SecondActivity被销毁之后会回调上一个活动的onActivityResult()方法,因此在FirstActivity写这个方法得到返回的数据。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode){
case 1:
if(resultCode==RESULT_OK){
String returnedData = data.getStringExtra("data_return");
Log.d("FirstActivity", returnedData);
}
break;
default:
}
}
解释:
由于一个活动有可能通过startActivityForReslut()方法启动很多不同的活动,每个活动返回的数据都会调用onActivityResult()方法,因此首先通过检查requestCode的值来判断数据来源,确定数据来源后,在通过resultCode 的值来判断处理结果是否成功。
onActivityResult():带有三个参数。
- 第一个参数:requestCode,即我们在启动活动时传入的请求码。
- 第二个参数:resultCode , 即在返回数据时传入的处理结果。
- 第三个参数:data, 即携带返回数据的Intente。
-
运行结果:
从FirstActivity中进入SecondActivity,再点击Button2返回FirstActivity。
**目的:**SecondActivity通过Back建回到FirstActivity时传递数据。
代码:
在SecondActivity中重写onBackPressed()方法
@Override
public void onBackPressed() {
Intent intent = new Intent();
intent.putExtra("data_return", "Hello FirstActivity");
setResult(RESULT_OK, intent);
finish();
}