用Intent传递数据
向下一个Activity传递数据
Intent提供了一系列putExtra()方法的重载,可以把我们想要传递的数据暂存在Intent中,启动了另一个活动后,只需要把这些数据再从Intent中取出就可以了。
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String data = "Hello World";
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("extra_data", data);
startActivity(intent);
}
)};
接着可以通过getIntent()方法获取到用于启动SecondActivity的Intent,然后调用getStringExtra()方法,传入相应的键值,就可以得到传递的数据了。
pubic 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);
}
}
向上一个Acitivity返回数据
Activity中有一个startActivityForResult()方法可以用于启动Activity,这个方法期望在活动销毁的时候返回一个结果给上一个活动。
@Override
public void onClick(View v) {
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivityForResult(intent, 1);
}
接着在SecondActivity中构建一个Intent,把要传递的数据存入这个Intent中,然后调用setResult()方法接收两个参数,第一个参数用于向上一个活动返回处理结果,一般使用RESULT_OK或RESULT_CANCELED这两个值,第二个参数则把带有数据的Intent传递回去。
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("data_return", "Hello World");
setResult(RESULT_OK, intent);
finish();
}
SecondActivity被销毁之后会调用上一个Activity的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 = data.getStringExtra("data_return");
Log.d("FirstActivity", returnedData);
}
break;
default:
}
}
如果是通过按下Back键返回的,只需要重写onBackPressed()方法。
@Override
public void onBackPressed() {
Intent intent = new Intent();
intent.putExtra("data_return", "Hello World");
setResult(RESULT_OK, intent);
finish();
}
第一行代码Android(第二版 ) 郭霖 著 人民邮电出版社