在Android中,两个Acitivity之间是靠Intent传递信息的,因为Intent本来就起到信使的作用,所以用它来传递数据也显得顺理成章了.
Intent 提供了多个方法来"携带"额外的数据
putExtras(Bundle data): 向Intent中放入需要"携带"的数据
putXxx(String key,Xxx date):向Bundle放入Int,Long等各种类型的数据(Xxx指代各种数据类型的名称)
putSerializable(String key,Serializable date):向Bundle中放入一个可序列化的对象.
当然Intent也提供了相应的取出"携带"数据的方法
getXxx(String key):从Bundle取出Int,Long 等各种数据类型的数据.
getSerializable(String Key,Serializable data): 从Bundle取出一个可序列化的对象.
下面以使用getSerializable为例,定义一个可序列化的Person类,模拟一个用户注册的过程,通过注册那个窗口(Acitivity)传递注册信息到另一个窗口
下面是定义的一个DTO类Person用来记录注册的信息,注意!要定义成可序列化的类,继承Serializable
- package WangLi.Activity.Bundle;
- import java.io.Serializable;
- public class Person implements Serializable {
- private String _Name;
- private String _Passwd;
- private String _Gender;
- public String getName()
- {
- return _Name;
- }
- public String getPass()
- {
- return _Passwd;
- }
- public String getGender()
- {
- return _Gender;
- }
- public Person(String Name,String Passwd,String Gender)
- {
- this._Name = Name;
- this._Passwd = Passwd;
- this._Gender = Gender;
- }
- }
第一个Activity界面如图
填入注册信息后,点"注册"后跳到新窗口,显示刚刚输入的信息
下面是注册窗口,界面xml 和代码
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical" >
- <TableLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content" >
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="请输入您的注册信息"
- android:textSize="20sp"
- />
- <TableRow>
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="用户名:"
- android:textSize="16sp"
- />
- <EditText
- android:id="@+id/name"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:hint="请填写想注册的账号"
- android:selectAllOnFocus="true"
- />
- </TableRow>
- <TableRow>
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="密码:"
- android:textSize="16sp"
- />
- <EditText
- android:id="@+id/passwd"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:password = "true"
- android:selectAllOnFocus="true"
- />
- </TableRow>
- <TableRow>
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="性别"
- android:textSize="16sp"
- />
- <RadioGroup
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- >
- <RadioButton
- android:id="@+id/male"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="男"
- android:textSize="16sp"
- />
- <RadioButton
- android:id="@+id/female"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="女"
- android:textSize="16sp"
- />
- </RadioGroup>
- </TableRow>
- <TableRow>
- <Button
- android:id="@+id/bn"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text='注册'
- android:textSize="16sp"
- />
- </TableRow>
- </TableLayout>
- </LinearLayout>
- package WangLi.Activity.Bundle;
- import android.app.Activity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.RadioButton;
- public class BundleTest extends Activity {
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- Button bn = (Button)findViewById(R.id.bn);
- bn.setOnClickListener(new OnClickListener()
- {
- public void onClick(View v)
- {
- EditText name = (EditText)findViewById(R.id.name);
- EditText passwd = (EditText)findViewById(R.id.passwd);
- RadioButton male = (RadioButton)findViewById(R.id.male);
- String gender = male.isChecked() ? "男" : "女";
- Person p = new Person(name.getText().toString(),passwd.getText().toString(),gender);
- //创建Bundle对象
- Bundle data = new Bundle();
- data.putSerializable("person", p);
- //创建一个Intent
- Intent intent = new Intent(BundleTest.this,ResultActivity.class);
- intent.putExtras(data);
- //启动intent对应的Activity
- startActivity(intent);
- }
- });
- }
- }
下面是第接受信息窗口在接受到注册信息以后的样子
第二个接受信息窗口界面xml 及代码
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical" >
- <TableLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content" >
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="请输入您的注册信息"
- android:textSize="20sp"
- />
- <TableRow>
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="用户名:"
- android:textSize="16sp"
- />
- <EditText
- android:id="@+id/name"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:hint="请填写想注册的账号"
- android:selectAllOnFocus="true"
- />
- </TableRow>
- <TableRow>
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="密码:"
- android:textSize="16sp"
- />
- <EditText
- android:id="@+id/passwd"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:password = "true"
- android:selectAllOnFocus="true"
- />
- </TableRow>
- <TableRow>
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="性别"
- android:textSize="16sp"
- />
- <RadioGroup
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- >
- <RadioButton
- android:id="@+id/male"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="男"
- android:textSize="16sp"
- />
- <RadioButton
- android:id="@+id/female"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="女"
- android:textSize="16sp"
- />
- </RadioGroup>
- </TableRow>
- <TableRow>
- <Button
- android:id="@+id/bn"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text='注册'
- android:textSize="16sp"
- />
- </TableRow>
- </TableLayout>
- </LinearLayout>
- package WangLi.Activity.Bundle;
- import android.app.Activity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.widget.TextView;
- public class ResultActivity extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.result);
- TextView name = (TextView)findViewById(R.id.name);
- TextView passwd = (TextView)findViewById(R.id.passwd);
- TextView gender = (TextView)findViewById(R.id.gender);
- //获取启动该Result的Intent
- Intent intent = getIntent();
- //获取该intent所携带的数据
- Bundle data = intent.getExtras();
- //从Bundle包中取出数据
- Person p = (Person)data.getSerializable("person");
- name.setText("用户名:"+p.getName());
- passwd.setText("密码:"+p.getPass());
- gender.setText("性别:"+p.getGender());
- }
- }