Activity之间的数据回传

当我们从第一个Activity跳转到第二个Activity时,需要对第二个Activity进行操作,然后返回其中的一些数据时,就需要用到数据回传

例如:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASU3msaTlp4blh6_nibk=,size_20,color_FFFFFF,t_70,g_se,x_16

下面就详细介绍Activity进行数据回传时包含的3个方法,分别是:

startActivityForResult()方法

setResult()方法

onActivityResult()方法

(1) startActivityForResult()方法

用于开启一个Activity,当开启的Activity销毁时,会从销毁的Activity中返回数据。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASU3msaTlp4blh6_nibk=,size_20,color_FFFFFF,t_70,g_se,x_16

(2)setResult() 方法

用于携带数据进行回传,该方法的语法格式如下:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASU3msaTlp4blh6_nibk=,size_20,color_FFFFFF,t_70,g_se,x_16

(3)onActivityResult()方法

用于接收回传的数据,该方法的语法格式如下:

程序会根据传递的参数requestCode与resultCode来识别数据的来源。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASU3msaTlp4blh6_nibk=,size_20,color_FFFFFF,t_70,g_se,x_16


了解了这三种方法的大体结构,然后我用一个例子带大家学明白

(1) startActivityForResult()

在MainActivity的btn_peach控件中点击事件中,添加跳转到PeachActivity的环节

代码如下:

btn_peach = findViewById(R.id.btn_peach);
btn_peach.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent = new Intent(MainActivity.this, PeachActivity.class);
        
        startActivityForResult(intent, 1);
    }
});

讲解:这实现的功能是,当我们在点击btn_peach对应的按钮时,会触发这个监听接口跳转到PeachActivity,并调用了数据回传的startActivityForResult()方法,标识请求码为1。(其中请求码可以自行设置)

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASU3msaTlp4blh6_nibk=,size_11,color_FFFFFF,t_70,g_se,x_16

(2)setResult()

在PeachActivity的btn_exit的点击事件中,包含着一个returnData()方法,方法中将需要需要回传的数据封装到Intent对象中,并调用setResult()方法将Intent对象中的数据回传到MainActivity中

代码如下:

private void returnData(){
    Intent intent = new Intent();
    intent.putExtra("count",count);
    setResult(1,intent);  //返回码标识
    PeachActivity.this.finish();
}

讲解:这实现的功能是,点击btn_exit按钮时,会调用returnData()方法,然后把封装在Intent对象中的数据通过setResult方法返回到MainActivity中。这里值得注意的是,在调用setResult()方法之后,一定要用finish()方法关闭当前的Activity,因为setResult()方法只负责返回数据,没有跳转的功能。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASU3msaTlp4blh6_nibk=,size_11,color_FFFFFF,t_70,g_se,x_16

(3)onActivityResult()

由于当PeachActivity被销毁后,程序会回调MainActivity的onActivityResult()方法接收回传的数据,所以需要在MainActivity中重写onActivityResult()方法

代码如下

@Override
protected void onActivityResult(int requestCode, int resultCode,
                                @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1&&resultCode==1) {
        int count = data.getIntExtra("count", 0); //获取回传的数据
        totalCount = totalCount + count;
        tv_count.setText("摘到" + totalCount + "个");
    }
}

讲解:实现的功能是,回调到onActivityResult()方法后,判断是那个请求码和回传码传来的数据,然后把它对应的data接收,并将它加到totalCount中

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASU3msaTlp4blh6_nibk=,size_11,color_FFFFFF,t_70,g_se,x_16


 文章中是小项目的部分核心代码,如果想自主学习,完整项目可以点我的资源

免费下载!!

或者点击【立即下载】

感谢大家支持,如果喜欢大家可以一键三连

  • 31
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 29
    评论
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IM汤姆凯特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值