引言
当在一个Activity中,启动另一个Activity时,会传递一些数据,。可以将这些数据保存到Bundle对象中,然后通Intent对象的putExtras()方法将要携带的数据
引言
当在一个Activity中,启动另一个Activity时,会传递一些数据,。可以将这些数据保存到Bundle对象中,然后通Intent对象的putExtras()方法将要携带的数据保存到Intent中。
注:Bundle是一个字符串值到各种Parceable类型的映射,用于保存携带的数据包。下面通过一个具体的实例来说明该类的用法.
实例分析-身高计算标准体重
(1)布局文件如下
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.eg_wightlengthnumber.MainActivity" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:padding="20px"
android:text="计算您的标准体重" />
<LinearLayout
android:id="@+id/linearLayout1"
android:gravity="center_vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="性别:" />
<RadioGroup
android:id="@+id/sex"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<RadioButton
android:id="@+id/radio0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="男" />
<RadioButton
android:id="@+id/radio1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="女" />
</RadioGroup>
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout2"
android:gravity="center_vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="身高:" />
<EditText
android:id="@+id/stature"
android:minWidth="100px"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</EditText>
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="cm" />
</LinearLayout>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="确定" />
</LinearLayout>
(2)写一个可序列化的一个类,用于存放bundle数据包
package com.example.eg_wightlengthnumber;
import java.io.*;
public class Info implements Serializable {
private static final long serialVersionUID=1L;
private String sex="";
private int stature=0;
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getStature() {
return stature;
}
public void setStature(int stature) {
this.stature = stature;
}
}
说明:在使用Bundle类传递数据包时,可以放入一个可以序列化的对象。so,当要传递数据字段比较多的时候,采用该方法比较方便。在本实例中,为了在Bundle中放入一个可序列化的对象,我们创建了一个可序列化Java类
(3)创建另一个Activity的布局文件,用于显示结果
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/sex"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10px"
android:text="性别" />
<TextView
android:id="@+id/stature"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10px"
android:text="身高" />
<TextView
android:id="@+id/weight"
android:padding="10px"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="标准体重" />
</LinearLayout>
(4)在主活动的MainActivity的onCreate()方法中,获取“确定”按钮,并为其添加单击事件监听,在重写的onClick()方法中,实例化一个保存性别和身高的可序列化对象info,一个Bundle对象,一个Intent对象,首先判断身高输入是否为空,为空弹出提示框,不为空,将输入的信息保存到bundle 对象中,并且将bundle对象保存到intent对象中,最后启动startActivity()主要代码如下:
Info info=new Info(); //实例化一个保存基本信息的对象
EditText editText=(EditText)findViewById(R.id.stature);//获取输入身高的“EditText”
int stature=Integer.parseInt(editText.getText().toString());
RadioGroup sex=(RadioGroup)findViewById(R.id.sex);
Bundle bundle=new Bundle();
Intent intent=new Intent(MainActivity.this, ResultActivity.class);
if("".equals(stature)){
Toast.makeText(MainActivity.this, "请输入您的身高,否则不能计算", Toast.LENGTH_SHORT).show();
return;
}else{
for(int i=0;i<sex.getChildCount();i++){
RadioButton r=(RadioButton)sex.getChildAt(i);
if(r.isChecked()){
info.setSex(r.getText().toString());
break;
}
}
info.setStature(stature);
bundle.putSerializable("info", info);
intent.putExtras(bundle);
startActivity(intent);
}
}
});
(5)编写返回结果的Acyivity,主要代码如下:
package com.example.eg_wightlengthnumber;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
public class ResultActivity extends Activity {
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.result);
TextView sex=(TextView)findViewById(R.id.sex); //获取显示性别的文本框
TextView stature=(TextView)findViewById(R.id.stature); //获取显示身高的文本框
TextView weight=(TextView)findViewById(R.id.weight); //获取显示标准体重的文本框
Intent intent=getIntent(); //获取Intent对象
Bundle bundle=intent.getExtras(); //获取传递的数据包
Info info=(Info)bundle.getSerializable("info"); //获取一个可序列化的info对象
sex.setText("您是一位"+info.getSex()+"士"); //获取性别并显示到相应文本框中
stature.setText("您的身高是"+info.getStature()+"厘米"); //获取身高并显示到相应文本框中
weight.setText("您的标准体重是"+getWeight(info.getSex(),info.getStature())+"公斤");
}
/**
* 计算标准体重
*/
private String getWeight(String sex,float stature){
String weight;
NumberFormat format=new DecimalFormat();
if(sex.equals("男")){
weight=format.format((stature-80)*0.7);
}else{
weight=format.format((stature-70)*0.6);
}
return weight;
}
}
(6)在AndroidMainfest.xml配置新的Activity
<activity
android:label="显示结果"
android:icon="@drawable/ic_launcher"
android:name=".ResultActivity"
>
THE END!!!