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接口。

posted on 2012-07-11 11:32  ssy黑桃a  阅读(8466)  评论(0编辑  收藏  举报