Android之Bundle类(浅谈)

  1. 引言

           当在一个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!!!

 

 

 

 

 

 

 


转载于:https://my.oschina.net/caipeng/blog/526425

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值