在Android开发中,如果要通过一个Activity启动另外一个Activity,需要调用startActivity()函数,这个函数的参数是一个Intent对象,这个对象通常的初始化方式如下:
Intent intent = new Intent(); intent.setClass(this,SecondActivity.class); startActivity(intent);
这样就完成了一个新的Activity的启动,但是这种启动方式两个Activity之间不会有任何的数据传递,很多情况下,我们遇到的往往是前一个Activity要把数据传递给新启动的Activity,这就要用到Bundle对象了。
比如在第一个Activity中,我们获取了身高和性别两种数据,需要传递给新启动的Activity,那么就要把这些数据封装进Bundle对象里面,再把Bundle对象assign给Intent,作为starActivity()函数的参数。
实现代码如下:
Intent intent = new Intent(); intent.setClass(this,SecondActivity.class); //封装Bundle对象 Bundle bundle = new Bundle(); bundle.putDouble("height",height);//height为double型变量 bundle.putString("sex",sex);//sex为string型变量 //把Bundle对象assign给Intent intent.putExtras(bundle); startActivity(intent);
第二个Activity相应的也要接收数据,方法也很简单,先从Intent对象中分离Bundle,再按照相同方法提取数据。
实现代码如下:
Bundle bundle1=this.getIntent().getExtras(); String sex=bundle1.getString("sex"); double height=bundle1.getDouble("height");
值得注意的是,如果程序中有多个Activity,要在AndroidManifest.xml中声明,声明一个Activity格式如下:
<activity android:name="SecondActivity"></activity>
当存在多个Activity时,必须指定一个最先启动的Activity,也是在AndroidManifest.xml中声明,声明方式如下:
<activity android:name="SecondActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity>
Bundle对象还有其他很多种对不同数据类型的操作方法,比如getBoolean等,具体可以到Android官网去参考。