Android中基本Intent传值详解

缘由

在项目中,需要将一个Activity中设置好的提醒时间返回给上一个页面并显示,因此需要用到Intent传值,而此前我的思路一直停留在:如何在另外一个Acitivity中获取另一个Acitivity的控件?

当我认识到,可以这么做,但是完全没必要,因为这样会使得Acitivity之间互相耦合,很容易出现内存泄漏。

使用Intent传值

使用Intent传值的作用,无非是传递你的意图,这个意图可以是:

  1. Acitivity跳转到指定的下一个Acitivity:
Intent intent = new Intent();
intent.setClass(this,NextAcitivity.class);
startAcitivity(intent);
  1. 从一个Acitivity把值传到另一个Acitivity:
Intent intent = new Intent();
intent.setClass(this,NextAcitivity.class);
intent.putExtra("key",value);
intent.putExtra(int,value);
...
  1. 通过Bundle进行传值:
Intent intent = new Intent();
intent.setClass(this,NextAcitivity.class);
Bundle bundle = new Bundle();
bundle.putString("key",value);
intent.putExtras(bundle);
startAcitivity(intent);

在目标Acitivity里取值

String value = getAcitivity().getIntent().getExtras("key");
//这里的getAcitivity()是为了获取当前Acitivity的对象

进阶:使用startAcitivityForResult()获取返回值

startAcitivityForResult()方法用于获取从一个Acitivity出去的另一个Acitivity的返回值

例如:从列表页面A打开编辑页面B,在页面B中完成了内容编辑,需要把B中内容的标题返回给页面A,并显示在A的列表清单里。

这里通过startAcitivityForResult()方法就可以完成。

1. 在A中设置请求:

Intent intent = new Intent();
intent.setClass(A-Acitivity,B-Acitivity);
//A-Acitivity,B-Acitivity是错误写法,只是为了读者能明白意图。
startAcitivityForResult(intent, requestCode);
//requestCode是请求识别码
//具体的作用就是在后面的onActivityResult()回调方法里作为识别和判断标识使用
//后面有具体例子说明

2. 在B中设置要传回的数据:

Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putString("key",value);
... //放你的数据
intent.putExtras(bundle);
getActivity().setResult(RESULT_OK, intent);//RESULT_OK是resultCode的值
finish();

要注意这里的setResult()方法,这里用来存放resultCode结果码和要传递的数据intent,这里的结果码resultCode跟之前提到的requestCode的作用是类似的。

3. 在A中接受从B传回的数据:

重写onActivityResult()回调方法:

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (resultCode == RESULT_OK){
            String value = data.getExtras().getString("key");
            ...//接受到这个数据以后,把数据在A中使用吧!
        }
    }

结尾

漫长的爬坑之路,多看多写,多学习。

Winter of Internet is coming.

这只是刚刚开始,努力生存下来吧。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值