关于Activity之间的通信

一个app是由多个activity组成的,activity之间相互传递数据,即activity之间的通信。提到安卓的通信,那么肯定离不开Intent,Intent中文翻译为 意图。通过Intent,我们可以开启另一个activity并向其发送数据。关于Intent,谷歌官方文档描述如下:

An Intent is a messaging object you can use to request an action from
another app component.

就是说Intent是一个消息对象,你可以用来请求另一个应用组件。
Intent的用法如下:

       //第一个参数是Context ,上下文,即你现在所在的页面,第二个参数是你所要打开activity的类名
        Intent intent = new Intent(CurrentActivity.this,OtherActivity.class);
        //放入数据,可以是任何类型的数据
        intent.putExtra("Key1","Value");
        intent.putExtra("Key2",int);
        //注意,如果放入的数据为类,那么这个类必须实现Serializable接口
        intent.putExtra("Key3",new Bean());
        //开启另一个界面
        startActivity(intent); 

在开启的第二个界面:

       //拿到Intent对象
        Intent intent = getIntent();
        //拿到对应的数据
        String value = intent.getStringExtra("key1");
        int i = intent.getIntExtra("key2", defaultValue);
        Bean bean = (Bean) intent.getSerializableExtra("key3");

以上介绍的是activity的单向通信,如果我们需要开启的activity返回数据,则必须使用startActivityForResult(Intent intent, int requestCode)方法。具体代码如下:

        Intent intent = new Intent(CurrentActivity.this,OtherActivity.class);
        //请求码,注意请求码一定要>=0
        int requestCode = 1;
        //开启第二个界面
        startActivityForResult(intent,requestCode);

并且在第一个activity中重写onActivityResult(int requestCode, int resultCode, Intent data)方法。这个方法会在第二个activity返回数据并执行finish()后调用。第二个activity代码如下:

        //获取intent对象,并从中拿到我们所需要的数据
        Intent intent = getIntent();
        //将第一个activity所需要接收的数据放入
        intent.putExtra("key","value");
        //设置结果码与intent
        setResult(RESULT_OK,intent);
        //结束此activity,并返回第一个activity执行onActivityResult(int requestCode, int resultCode, Intent data)
        finish();

第一个activity的onActivityResult(int requestCode, int resultCode, Intent data)重写如下:

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (resultCode){
            case RESULT_OK:
                String value = data.getStringExtra("key");
                break;
            default:
                break;
        }
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值