一、目标
在Java中我们一般通过构造函数的方法来传递参数,而在Android中,我们则需要借助 Intent(桥梁) 和 Bundle(容器) 来完成。下面将以计算男女标准体重为例详解不同Activity之间数据的传递问题。当用户从第一个页面跳转到第二页面时,需要将第一个页面的数据(性别,身高)传递给第二页面,第二个页面利用传递过来的性别和身高计算出标准体重,并更新页面。
1、计算男生标准体重
![]()
2、计算女生标准体重
![]()
二、代码
1、MainActivity.java
package com.myandroid.helloandroid; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.EditText; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.Toast; public class MainActivity extends Activity implements OnClickListener { private Button btnCalculate; private RadioGroup sexGroup; private RadioButton rbtnMale, rbtnFemale; private EditText etxtHeight; private String strSex; private double douHeight; private Boolean bolSexChecked = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sexGroup = (RadioGroup) findViewById(R.id.sexGroup); rbtnMale = (RadioButton) findViewById(R.id.rbtnMale); rbtnFemale = (RadioButton) findViewById(R.id.rbtnFemale); etxtHeight = (EditText) findViewById(R.id.etxtHeight); btnCalculate = (Button) findViewById(R.id.btnCalculate); btnCalculate.setOnClickListener(this); sexGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { bolSexChecked = true; if (checkedId == R.id.rbtnMale) { strSex = "男"; } else if (checkedId == R.id.rbtnFemale) { strSex = "女"; } } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btnCalculate: if (!bolSexChecked || etxtHeight.getText().toString().isEmpty()) { Toast.makeText(MainActivity.this, "请检查填写信息", Toast.LENGTH_SHORT) .show(); } else { bolSexChecked = false; // 取得身高 douHeight = Double.parseDouble(etxtHeight.getText().toString()); jump2Activiy2(); } break; } } private void jump2Activiy2() { Bundle bundle = new Bundle(); bundle.putString("strSex", strSex); bundle.putDouble("douHeight", douHeight); Intent intent = new Intent(); intent.setClass(MainActivity.this, TwoActivity.class); intent.putExtra("info", bundle); startActivity(intent); MainActivity.this.finish(); } }
2、TwoActivity.javapackage com.myandroid.helloandroid; import java.text.DecimalFormat; import java.text.NumberFormat; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class TwoActivity extends Activity implements OnClickListener { private Button btn2; private TextView txt2; private String strSex, strHeight, strWeight; private double douHeight; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_two); txt2 = (TextView) findViewById(R.id.txt2); btn2 = (Button) findViewById(R.id.btn2); btn2.setOnClickListener(this); // 取得Intent中的Bundle对象 Intent itt = this.getIntent(); Bundle bundle = itt.getBundleExtra("info"); // 取得Bundle中的数据 strSex = bundle.getString("strSex"); douHeight = bundle.getDouble("douHeight"); // 数据处理 strHeight = douFormat(douHeight); // 计算标准体重 strWeight = calculateWeight(strSex, douHeight); txt2.setText("你是一位" + strSex + "生,\n你的身高是" + strHeight + "厘米,\n你的标准体重是" + strWeight + "kg"); } // 根据性别和身高计算标准体重 private String calculateWeight(String sex, double height) { String weight = null; if (!sex.isEmpty() && sex.equals("男")) { weight = douFormat((height - 80) * 0.7); } else if (!sex.isEmpty() && sex.equals("女")) { weight = douFormat((height - 70) * 0.6); } return weight; } // 四舍五入,格式化字符串 private String douFormat(double inputDouble) { NumberFormat douFormat = new DecimalFormat("0.00"); String outStr = douFormat.format(inputDouble); return outStr; } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn2: jump2Activiy1(); break; } } private void jump2Activiy1() { Intent itt = new Intent(); itt.setClass(TwoActivity.this, MainActivity.class); startActivity(itt); TwoActivity.this.finish(); } }
3、activity_main.xml<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_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=".MainActivity" > <TextView android:id="@+id/txt1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="50dp" android:text="计算你的标准体重" android:textSize="18sp" /> <LinearLayout android:id="@+id/linearLayout1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/txt1" android:layout_below="@+id/txt1" android:layout_marginTop="33dp" > <TextView android:id="@+id/txtSex" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="性别:" /> <RadioGroup android:id="@+id/sexGroup" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" > <RadioButton android:id="@+id/rbtnMale" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="男" /> <RadioButton android:id="@+id/rbtnFemale" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="女" /> </RadioGroup> </LinearLayout> <LinearLayout android:id="@+id/linearLayout2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/linearLayout1" android:layout_alignRight="@+id/txt1" android:layout_below="@+id/linearLayout1" android:layout_marginTop="31dp" > <TextView android:id="@+id/txtHeight" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="身高:" /> <EditText android:id="@+id/etxtHeight" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.67" android:inputType="number" android:ems="10" > <requestFocus /> </EditText> <TextView android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="cm" /> </LinearLayout> <Button android:id="@+id/btnCalculate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/linearLayout2" android:layout_centerHorizontal="true" android:layout_marginTop="18dp" android:text="计算" /> </RelativeLayout>
4、activity_two.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_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=".MainActivity" > <Button android:id="@+id/btn2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="137dp" android:text="返回" /> <TextView android:id="@+id/txt2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="84dp" android:text="标准体重计算结果" /> </RelativeLayout>
5、AndroidManifest.xml<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.myandroid.helloandroid" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="11" android:targetSdkVersion="15" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.myandroid.helloandroid.MainActivity" android:label="@string/act_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.myandroid.helloandroid.TwoActivity" android:label="@string/act_name" > </activity> </application> </manifest>
三、讨论
1、其实,如果只进行简单的数据的传递,可以直接让 intent “捎话”,而要进行多种(个)数据的传递,则最好利用 Intent 中的Bundle对象对它们进行“打包”发送,然后在接收页面以“键值”的方式获取数据。
2、这里只介绍了如何从第一个页面向第二个页面传递数据,接下来将介绍如何在第一个页面获取从第二个页面返回的数据。
谨代表个人意见,抛砖引玉,代码有写作不规范的地方,接受走过的路过的直接拍砖斧正。
源码下载地址:http://download.csdn.net/detail/liyongliang_2012/7546419 文件名:HelloAndroid20140624.rar