AndroidStudio Intent数据传送(父向子,子向父)

本文深入解析了Android应用中使用Intent与Bundle进行数据传递的方法。详细介绍了如何在不同Activity间通过Intent携带参数,以及利用Bundle封装数据进行高效传输。同时,文章还探讨了子活动向父活动回传数据的流程,包括startActivityForResult与onActivityResult的配合使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

父向子
看到一个十分形象的比喻,要传送的数据是就是你在淘宝买的一个具体商品,商品从商家到你这就是页面跳转传参数(商品是参数)。然后商家就会把商品放进盒子,发快递给你。而装商品的盒子就是Bundle,Intent就是快递员。需要用Bundle封装数据,借Intent传送数据集。
Intent传值
第一个界面发送数据

        Intent intent=new Intent(MainActivity.this,Address.class);
        intent.putExtra("integer",5);
        intent.putExtra("double",2.55);
        intent.putExtra("string","test");

第二个界面接收数据

        Intent intent=getIntent();
        Integer driverid=intent.getIntExtra("driverid",0);
        double finalMoney1= intent.getDoubleExtra("money",0);
        String string=intent.getStringExtra("string");

通过Bundle
第一个界面发送数据:

        Intent intent=new Intent(MainActivity.this,Address.class);
        Bundle bundle=new Bundle();
        bundle.putCharSequence("name","test");
        bundle.putInt("Int",2);
        bundle.putDouble("double1",2.257);
        bundle.putString("string","main");
        intent.putExtras(bundle);

第二个界面接收数据

        Intent intent1=getIntent();
        Bundle bundle1=intent1.getExtras();
        String name=bundle1.getString("name");
        int Int=bundle1.getInt("Int");
        double double1=bundle1.getDouble("double1",0);//第二值是默认值
        String  string=bundle1.getString("string");

<-------------------------------->
子向父
看个例子
我们构造两个界面,为main和testbababa,界面都很简单,
主界面:在这里插入图片描述子界面:在这里插入图片描述把正常跳转的startActivity(intent)改成startActivityForResult(intent,100);这个100是一个请求码,用于区别,可能这个main界面会向好几个其他子界面发送请求,为了在 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data)函数加以区分,所写的。那么这个函数又是干什么的,这个函数是子活动结束后,主活动进行响应的重载函数。
在子活动当中,通过intent进行返回,调用 setResult(1, intent);函数。这个1是响应码,因为可能子活动会在不同的情况下进行不同的传参,在onActivityResult()函数中进行区分。
在看看onActivityResult()的三个参数
第一个int requestCode:父向子的请求码
第二个 int resultCode:子向父的响应码
第三个 @Nullable Intent data:子向父返回的intent对象。
看看主程序代码


public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    Button button;
    TextView ed1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button=findViewById(R.id.btn);
        ed1=findViewById(R.id.et1);
        button.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        Intent intent=new Intent();
        intent.setClass(this,testbababa.class);
        intent.putExtra("father",ed1.getText());
        /**
        /*
        /*这里改成  startActivityForResult(intent,100);
        */
        startActivityForResult(intent,100);
    }
        /**
        /*
        /*重写  protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data)函数
        */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode!=100)
            return;
        if(resultCode!=1)
            return;
        ed1.setText(data.getStringExtra("son"));
    }
}

子程序代码


public class testbababa extends AppCompatActivity {
    TextView tv1;
    TextView tv2;
    Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        tv1 = findViewById(R.id.ed2);
        tv2 = findViewById(R.id.tv);
        button = findViewById(R.id.btn1);

        Intent intent = getIntent();
        String string = intent.getStringExtra("father");
        tv1.setText(string);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent();
                intent.putExtra("son", tv2.getText());
                setResult(1, intent);
                finish();
            }
        });
    }
}

eg:要子活动给父活动响应参数,一定要子活动结束,才会触发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值