不同Activity之间的传递数据
一、API类说明
1.Bundle类-实现数据传递
(1)简介
Bundle对象用于不同Activity之间的数据传递。对于不同Actvity而言,Bundle对象就相当于一个数据包,Intent对象就充当搬运工。
首先,创建一个Bundle对象bundle并调用其成员方法PutString或者putInt或者putDouble等方法,将要传递的数据赋值给指定的变量(键值)再将他们压入bundle对象中,即“制作数据包”;
然后,把已经制作好的"数据包"(即Bundle对象),通过Intent对应Extras属性的putExtras方法,将Bundle对象(数据包)交给Intent对象(搬运工)。"意图"在启动Activity后,会将这个Bundle对象作为参数传递给被启动的Activity.
最后,在被启动的Activity中接收到通过Intent对象传递过来的数据包(Bundle对象),但是如果要想使用数据包里的数据,需要将这个数据包(Bundle对象)从intent分离(Bundlebundle1=this.getIntent().getExtras();),得到bundle对象后,我们再使用Bundle成员方法getString或者getDouble等,从数据包(Bundle对象)中获取里面的变量,再将其值作为返回的结果。经过压缩数据包-传递-解压数据包,最终获取传递的数据。
(2)构造函数
Bundle()
Constructs a new, empty Bundle.
|
Bundle( ClassLoader loader)
Constructs a new, empty Bundle that uses a specific ClassLoader for instantiating Parcelable and Serializable objects.
|
|
Bundle(int capacity)
Constructs a new, empty Bundle sized to hold the given number of elements.
|
|
Bundle( Bundle b)
创建一个新的Bundle对象,这个Bundle对象从给定的Bundle对象复制而来
|
|
Bundle( PersistableBundle b)
Constructs a Bundle containing a copy of the mappings from the given PersistableBundle.
|
(3)重要方法
clear():清除此Bundle映射中的所有保存的数据。
clone():克隆当前Bundle
containsKey(String key):返回指定key的值
getString(String key):返回指定key(变量)的字符
hasFileDescriptors():指示是否包含任何捆绑打包文件描述符
isEmpty():如果这个捆绑映射为空,则返回true
putString(String key, String value):插入一个给定key的字符串值
readFromParcel(Parcel parcel):读取这个parcel的内容
remove(String key):移除指定key的值
writeToParcel(Parcel parcel, int flags):写入这个parcel的内容
2.Intent类
static Intent | getIntent() 获取intent对象 |
Intent | putExtras( Bundle extras)
将数据包(Bundle对象)压入Intent对象中
|
Bundle | getExtras()
从intent对象的extras属性中,获取被传递的数据包(Bundle对象)
|
二、不同Activity数据传递开发基本思想
在Android开发中,如果要通过一个Activity启动另外一个Activity,需要调用startActivity()函数,这个函数的参数是一个Intent对象,这个对象通常的初始化方式如下:
Intent intent = new Intent(); intent.setClass(this,SecondActivity.class); startActivity(intent);这样就完成了一个新的Activity的启动,但是这种启动方式两个Activity之间不会有任何的数据传递,很多情况下,我们遇到的往往是前一个Activity要把数据传递给新启动的Activity,这就要用到Bundle对象了。
Intentintent=newIntent(); intent.setClass(this,SecondActivity.class); //封装Bundle对象 Bundlebundle=newBundle(); bundle.putDouble("height",height);//压入数据,height为double型变量 bundle.putString("sex",sex);//压入数据,sex为string型变量 //把Bundle对象assign给Intent intent.putExtras(bundle); startActivity(intent);
Bundlebundle1=this.getIntent().getExtras(); Stringsex=bundle1.getString("sex");//从变量sex中读取数据,将返回字符串赋值给sex doubleheight=bundle1.getDouble("height");//从变量sex中读取数据值得注意的是,如果程序中有多个Activity,要在AndroidManifest.xml中声明,声明一个Activity格式如下:
<activityandroid:name="SecondActivity"></activity>
<activityandroid:name="SecondActivity"> <intent-filter> <actionandroid:name="android.intent.action.MAIN"/> <categoryandroid:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity>
BundleDemo.java
BundleDemo1.java