Android:Activity 传递数据
一、向下一个活动传递数据
Intent中提供了一系列的putExtra()的方法重载,可以把我们所要传递到下一个活动的的数据暂时保存在Intent。然后在下一个活动页面中通过Intent中提供的方法再取出来就可以了。
如,在 FirstActivity 中把数据保存在 Intent 中,代码如下:
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String data = "你好,活动二";
Intent intent = new Intent(FirstActivity.this,SencondActivity.class);
//intent提供一系列的putExtra()方法重载
//第一个参数是键,方便目标活动接收时取值,第二个参数才是真正传递的数据。
intent.putExtra("extra_data",data);
startActivity(intent);
}
});
在 SencondActivity 中将 Intent 中保存的数据取出,代码如下:
public class SencondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sencond);
Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");
}
}
二、返回数据给上一个活动
如果想在下一个活动传递数据到上一个活动,我们可以在第一个活动中使用 startActivityForResult() 方法来启动第二个活动,startActivityForResult() 方法有两个参数,第一个参数是 intent,第二个参数是请求码,用于在之后的回调中判断数据的来源。
如,在 FirstActivity 中使用 startActivityForResult() 方法来启动 SencondActivity,并重载 onActivityResult() 方法,在 SencondActivity 被销毁后,会回调上一个活动的 onActivityResult() 方法,我们可以在这里获取返回的数据。 代码如下:
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(FirstActivity.this,SencondActivity.class);
startActivityForResult(intent, 1);
}
});
@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:
}
}
在 SencondActivity 返回数据,通过调setResult()方法向上一个活动返回数据; setResult() 方法有两个参数,参数一为结果码,一般只使用 RESULT_OK 或者 RESULT_CANCELED,参数二为 intent ,用于保存传递的数据。代码如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second_layout);
Button button2 = (Button) findViewById(R.id.button_2);
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();
}
});
}