intent传值是如何传的?

    intent翻译为中文的意思是意图,目的。它的作用就是调用某个组件去做某一个事情。比如从当前运行的activity跳转到另一个activity,当前activity要启动一个service或启动一个broadcastreceive(广播接收器),此时就需要用intent来完成。简单的说intent是各个组件的一个桥梁。既然充当了桥梁的角色,那么intent就该可以传递数据,把当前的组件的数据传递到另一个组件去使用,那么intent是如何来传递值的呢?通过Intent类提供的setData()和putExtra()方法传递。前一个参数是uri,是个标识比如一个文件的路径等。后一个参数可以是值也可以是对象,以键值对的形式传递。

 ActivityA:

    Intent intent=new Intent();
    intent.setClass(ActivityA.this,ActivityB.class);
    intent.putExtra("extra", "Welcome to ...");
    startActivity(intent);

ActivityB:

  Intent intent=getIntent();
  String stringValue
=intent.getStringExtra("extra");

 如果把stringValue的值改变,ActivityA中extra所对应的值不会变。
以上的列子是通过putExtra()方法传值的,现在看看对象的传递,是怎么传递的?

 ActivityA:

    Intent intent=new Intent();    

    intent.setClass(ActivityA.this,ActivityB.class);   

    Student s=new Student("shao",20);

    intent.putSerializable("STUDENT", s);    

    startActivity(intent);

 ActivityB:

  Intent intent=getIntent();  

  Student s=intent.getSerializable("STUDENT");

 现在如果把ActivityB中得到的Student对象s ,改变一个值,如s.setName("yang");那么ActivityA里的s会变吗?不会变,因为intent传递对象时,传递的是一个副本(深拷贝)。

所以在android中,intent进行数据传递时,基本数据类型和对象传递的都是副本,改变传递过来的值,不会改变原来的值。注意的是在进行对象传递的时候,该对象所对应的类要实现Serializable接口或Parcelable接口。

转载于:https://www.cnblogs.com/crearo-ssy/archive/2012/07/11/2585969.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值