Activity与Activity之间使用Intent
Activity to Activity
Activity1直接以键值对的方式把数据存入Intent,再使用该Intent启动Activity2
Intent it = new Intent(JumpStartActivity.this, JumpResultActivity.class);
String name = "Lucy";
int age = 18;
//直接以键值对的方式把数据存入Intent
it.putExtra("name", name);
it.putExtra("age", age);
startActivity(it);
Activity1先把数据打包为一个Bundle,使用Intent携带该数据包,然后使用该Intent启动Activity2
Intent it = new Intent(JumpStartActivity.this, JumpResultActivity.class);
String name = "yee";
int age = 20;
//把数据打包为bundle
Bundle bundle = new Bundle();
bundle.putString("name", name);
bundle.putInt("age", age);
//Intent携带数据包
it.putExtras(bundle);
startActivity(it);
Activity2通过Intent获取数据
Intent it = getIntent();
String name = it.getStringExtra("name");
//当age的值为空时,使用默认值0
int age = it.getIntExtra("age", 0);
show.setText(name + "'s age is:" + age);
//使用Bundle接收数据
Bundle bundle = getIntent().getExtras();
String name = bundle.getString("name");
int age = bundle.getInt("age");
show.setText(name + "'s age is:" + age);
Activity to Activity for result
Activity1通过Intent启动另外一个Activity2,并在Activity2退出时,返回数据给Activity1
1、Activity1启动Activity2使用startActivityForResult(intent, requestCode),自定义一个请求码
Intent it = new Intent(JumpStartActivity.this, JumpResultActivity.class);
startActivityForResult(it, 1);
2、Activity1重写onActivityResult(requestCode, resultCode, intent)方法,该方法在Activity2退出时触发
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 1 && resultCode == 2) {
Bundle bundle = intent.getExtras();
String str = bundle.getString("msg");
show.setText(str);
}
}
3、Activity2处理数据后,设置:setResult(resultCode, intent),自定义结果码
findViewById(R.id.bt_return).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent it =getIntent();
Bundle bundle = new Bundle();
bundle.putString("msg", msg);
it.putExtras(bundle);
//设置返回数据
setResult(2,it);
//结束该Activity
finish();
}
});
4、Activity2回传数据后,结束结束自己:finish();
5、Activity1通过请求码和结果码校验结果,接收数据
Activity与Fragment之间使用Intent
从Fragment启动Activity,也可以使用Intent传递数据,具体过程与Activity之间的使用Intent传递数据大致相同。由于Fragment嵌入在Activity中,所以在传递数据过程中,会先经过宿主Activity的解析,然后中转,这里特别要注意一点:当Fragment通过startActivityForResult启动Activity时,重写onActivityResult方法一定不要去掉这句代码:
//业务处理结果之后,一定要在最后保留该代码,这是宿主Activity解析回传数据并转给Fragment的关键语句
super.onActivityResult(requestCode, resultCode, data);
@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 0 && resultCode == 0){
Bundle b = intent.getExtras();
tv.setText(b.getString("msg"));
}
//Fragment启动Activity获取结果,这句代码千万别删哦
super.onActivityResult(requestCode, resultCode, intent);
}