API文档中:
Bundle类是一个final类://不能被继承,即没有子类
public final class
Bundle
extends Objec timplements Parcelable Cloneable
用于两个Activity之间的通讯。具体做法是:
1.新建一个Bundle类
Bundle bundle=new Bundle();
2.Bundle类中放入数据(key-value的形式,另一个Activity里面取数据的时候,就要用到key,找出对应的value)
bundle.putString("key" ," value");
3.新建一个intent对象,并将该bundle加入到这个intent对象
Intent intent=new Intent( );
intent.putExtras(bundle);
4.获取key所对应的value
Bundle bundle=getIntent().getExtras();
String data=bundle.getString("key");
当一个Activity启动另一个Activity时,同时会有一些数据需要传递过去,而两个Activity之间本来就有一个“信使”:Intent,因此可以将需要携带的数据放入Intent中即可。Intent提供了多个重载的方法来携带数据,如:
putExtras(Bundle extras):向Intent中放入需要携带的数据包
Bundle getExtras():取出Intent所携带的数据包
putExtra(String name,Xxx value):向Intent中按key-value对的形式存入数据
getXxxExtra(String name):从Intent中按key取出指定类型的数据
Bundle就是一个简单的数据携带包,Bundle对象也包含了多个方法来存入数据:
putXxx(String key, Xxx data):向Bundle中放入Int、Long等各种类型的数据
putSerializable(String key, Serializable data):向Bundle中放入一个可序列化的对象
为了取出Bundle数据携带包里的数据,Bundle提供了如下方法:
getXxx(String key):从Bundle取出Int、Long等各种类型的数据
getSerializable(String key,Serializable data):从Bundle取出一个可序列化的对象
其实,Intent所提供的putExtras(Bundle extras)、getXxxExtra(String name)方法,只是一个便捷的方法,这些方法是直接存取Intent所携带的Bundle中的数据。
当程序调用Intent的putExtra(String name ,Xxx value)方法向Intent中存入数据时,如果该Intent中已经携带了Bundle对象,则该方法直接向Intent所携带的Bundle存入数据;如果Intent还没有携带Bundle对象,putExtra(String name,Xxx value)方法会先为Intent创建一个Bundle,再向Bundle中存入数据。
可参见Intent部分源代码如下:
1 public Intent putExtra(String name, String[] value) {
2 if (mExtras == null) {
3 mExtras = new Bundle();
4 }
5 mExtras.putStringArray(name, value);
6 return this;
7 }