转载自:http://www.cnblogs.com/crearo-ssy/archive/2012/07/11/2585969.html
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接口。
转载自:http://www.2cto.com/kf/201208/148480.html
EditText et = (EditText)findViewById(R.id.etName);//定义的文本框。
String aa = et.getText().toString();//获取文本框内容。
Intent intent = new Intent();
intent.setClass(helloworld.this,android2.class);//helloworld.class为Activity,android2.class为Activity。
intent.putExtra("name", "传值测试!");//设置传递内容。
startActivity(intent);//跳转。
finish();//关闭当前Activity。
第一种写法,用于批量添加数据到Intent:
Intent intent = new Intent();
Bundle bundle = new Bundle();//该类用作携带数据
bundle.putString("name", "学习android");
intent.putExtras(bundle);//为意图追加额外的数据,意图原来已经具有的数据不会丢失,但key同名的数据会被替换
第二种写法:这种写法的作用等价于上面的写法,只不过这种写法是把数据一个个地添加进Intent,这种写法使用起来比较方便,而且只需要编写少量的代码。
Intent intent = new Intent();
intent.putExtra("name", "学习android");
在android2的onCreate方法中取值
【取值方法:String test= (String)(this.getIntent().getExtras().getString("name"));】