在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:///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();
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:///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();
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());
}
}
当然,最后也别忘了把所有Activity都加入AndroidManifest.xml中