Intent传递数据

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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值