在Android开发中,经常要在Activity之间传递数据。前面也学习了Activity和Intent相关基础,接下来一起来学习Activity的数据传递。
一、简介
通过前面的学习知道,Intent可以用来开启Activity,同样它也可以用来在Activity之间传递数据。Intent提供了多个重载的方法来携带额外的数据,如下所示。
-
putExtra(String name, xxx value):向 Intent 中按 key-value 对的形式存入数据。
-
getXxxExtra(String name):从Intent中按key取出指定类型的数据。
-
putExtras(Bundle data):向Intent中放入需要携带的数据包。
-
Bundle getExtras():取出Intent中所携带的数据包。
使用Intent传递数据只需调用putExtra()方法将想要存储的数据存在Intent中即可。当启动了另一个Activity后,再把这些数据从Intent中取出即可。其核心示例代码如下:
// 从MainActivity传递数据到SecondActivity
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
String name="admin ";
intent.putExtra("extra_data_name",name);
startActivity(intent);
// 取出MainActivity传递过来的数据
Intent intent=getIntent();
String name=intent.getStringExtra("extra_data_name");
还有另外一种方式,就是传递Bundle对象。Bundle对象包含了多个方法来存入数据和取出数据,如下所示。
-
putXxx(String key , Xxx data):向 Bundle 中放入 int、long 等各种类型的数据。
-
putSerializable(String key,Serializable data):向 Bundle 中放入一个可序列化的对象。
-
getXxx(String key):从Bundle中取出int、long等各种类型的数据。
-
getSerializable(String key, Serializable data):从 Bundle 中取出一个可序列化的对象。
使用Bundle对象传递数据的核心代码如下:
// 从MainActivity传递数据到SecondActivity
Bundle bundle=new Bundle();
bundle.putString("name","Linda ");
bundle.putInt("age",20);
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
intent.putExtras(bundle);
startActivity(intent);
// 取出MainActivity传递过来的数据
Intent intent=getIntent();
Bundle bundle=intent.getExtras();
String stuName=bundle.getString("name");
int stuAge=bundle.getString("age");
在上述代码中,在接收Bundle对象封装的数据时,需要先创建对应的Bundle对象,然后再根据存入的key值取出value。其实用Intent传递数据以及对象时,它的内部也是调用了Bundle对象相应的put()方法,也就是说Intent内部也是用Bundle来实现数据传递的,只是封装了一层而已。
二、示例
接下来通过一个示例来学习两个Activity之间如何通过Bundle交换数据。
创建一个示例程序,非常简单,一共有两个界面,其中第一个界面有用户名、密码和性别等信息,然后有一个注册按钮,第二个界面包含多个文本框。让用户将信息填写完整后点击注册,将所有信息传入到第二个页面去模拟注册,这里就简单显示出来即可。
第一个Activity对应的布局文件(activity_main)的代码如下所示:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/regist_username_ll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="22dp"
android:orientation="horizontal" >
<TextView
android:layout_width="80dp"
android:layout_height="wrap_content"
android:gravity="right"
android:paddingRight="5dp"
android:text="用户名 :" />
<EditText
android:id="@+id/name_et"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入您的用户名"
android:textSize="14dp" />
</LinearLayout>
<LinearLayout
android:id="@+id/regist_password_ll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/regist_username_ll"
android:layout_centerHorizontal="true"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="5dp"
android:orientation="horizontal" >
<TextView
android:layout_width="80dp"
android:layout_height="wrap_content"
android:gravity="right"
android:paddingRight="5dp"
android:text=