`
心雨心
  • 浏览: 355833 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

不同Activity之间的数据传递

阅读更多
             不同Activity之间的数据传递

Bundle对象的实现

范例说明

在上一个范例里,介绍了如何在Activity中调用另一个Activity,但若需要在调用另外一个Activity的同时传递数据,那么就需要 利用android.os.Bundle对象封装数据的能力,将欲传递的数据或参数,通过Bundle来传递不同Intent之间的数据。

本范例的设计为一个简易表单的范例,在Activity1中收集User输入的数据,在离开Activity1的同时,将User选择的结果传递至下一个Activity2,以一个简单BMI"标准体重计算器"示范如何传递数据到下一个Activity里。

运行结果

 
(点击查看大图)图3-10  在两个Activity间做数据的传递
范例程序
src/irdc.ex03_10/EX03_10.java
在第一个Activity1主程序中,定义了"性别"选项的RadioGroup以及输入身高 的"EditText",并运用Intent及Bundle对象,在调用Activity2(EX03_10_1)时,同时将数据传入。关于 EditText对象的使用在此仅供参考,详细的应用以及属性方法,将会在未来讨论控件时,再详细解说。

package irdc.ex03_10;   /* import相关class */ import android.app.Activity;  import android.content.Intent;  import android.os.Bundle;  import android.view.View;  import android.widget.Button;  import android.widget.EditText;  import android.widget.RadioButton;   public class EX03_10 extends Activity   {    /** Called when the activity is first created. */   @Override   public void onCreate(Bundle savedInstanceState)     {      super.onCreate(savedInstanceState);      /* 载入main.xml Layout */     setContentView(R.layout.main);            /* 以findViewById()取得Button对象,并添加onClickListener */     Button b1 = (Button) findViewById(R.id.button1);      b1.setOnClickListener(new Button.OnClickListener()      {        public void onClick(View v)        {          /*取得输入的身高*/         EditText et = (EditText) findViewById(R.id.height);          double height=Double.parseDouble(et.getText().toString());          /*取得选择的性别*/         String sex="";          RadioButton rb1 = (RadioButton) findViewById(R.id.sex1);          if(rb1.isChecked())          {            sex="M";          }          else         {            sex="F";          }          /*new一个Intent对象,并指定class*/         Intent intent = new Intent();          intent.setClass(EX03_10.this,EX03_10_1.class);                    /*new一个Bundle对象,并将要传递的数据传入*/         Bundle bundle = new Bundle();          bundle.putDouble("height",height);          bundle.putString("sex",sex);                  /*将Bundle对象assign给Intent*/         intent.putExtras(bundle);                  /*调用Activity EX03_10_1*/         startActivity(intent);        }      });    }  }
src/irdc.ex03_10/EX03_10_1.java

那么,在Activity2(EX03_10_1)要如何接收来自Activity1(EX03_10)传递来的数据呢?试想,在 Activity1是以Bundle封装对象,自然在Activity2亦是以Bundle的方式解开封装的数据;程序中以 getIntent().getExtras() 方法取得随着Bundle对象传递过来的性别与身高,经过计算之后,显示在屏幕上。

package irdc.ex03_10;   /* import相关class */ import java.text.DecimalFormat;  import java.text.NumberFormat;  import android.app.Activity;  import android.os.Bundle;  import android.widget.TextView;   public class EX03_10_1 extends Activity   {    /** Called when the activity is first created. */   @Override   public void onCreate(Bundle savedInstanceState)    {      super.onCreate(savedInstanceState);      /* 加载main.xml Layout */     setContentView(R.layout.myalyout);            /* 取得Intent中的Bundle对象 */     Bundle bunde = this.getIntent().getExtras();            /* 取得Bundle对象中的数据 */     String sex = bunde.getString("sex");      double height = bunde.getDouble("height");            /* 判断性别 */     String sexText="";      if(sex.equals("M"))      {        sexText="男性";      }      else     {        sexText="女性";      }            /* 取得标准体重 */     String weight=this.getWeight(sex, height);            /* 设置输出文字 */     TextView tv1=(TextView) findViewById(R.id.text1);      tv1.setText("你是一位"+sexText+"\n你的身高是"                 +height+"厘米\n你的标准体重是"+weight+"公斤");    }        /* 四舍五入的method */   private String format(double num)    {      NumberFormat formatter = new DecimalFormat("0.00");      String s=formatter.format(num);      return s;    }     /* 以findViewById()取得Button对象,并添加onClickListener */      private String getWeight(String sex,double height)    {      String weight="";      if(sex.equals("M"))      {        weight=format((height-80)*0.7);      }      else     {        weight=format((height-70)*0.6);      }        return weight;    }  }
res/layout/mylayout.xml

mylayout.xml为(EX03_10_1)的Layout,定义了显示计算结果的TextView。

<?xml version="1.0" encoding="utf-8"?>  <AbsoluteLayout    android:layout_width="fill_parent"   android:layout_height="fill_parent"   xmlns:android="http://schemas.android.com/apk/res/android" >    <TextView      android:id="@+id/text1"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:textSize="20sp"     android:layout_x="50px"     android:layout_y="72px"   >    </TextView>  </AbsoluteLayout>
AndroidManifest.xml

由于本范例中有两个Activity,所以文件中必须有两个activity的声明,否则系统将无法运行,请看以下的描述。

<?xml version="1.0" encoding="utf-8"?>  <manifest    xmlns:android="http://schemas.android.com/apk/res/android"   package="irdc.ex03_10"   android:versionCode="1"   android:versionName="1.0.0">    <application      android:icon="@drawable/icon"       android:label="@string/app_name">      <activity        android:name=".EX03_10"       android:label="@string/app_name">        <intent-filter>          <action android:name="android.intent.action.MAIN" />          <category android:name="android.intent.category.LAUNCHER" />        </intent-filter>      </activity>      <activity android:name="EX03_10_1"></activity>    </application>  </manifest>
扩展学习

Bundle对象针对了不同的数据类型提供了许多的方法,例如,此范例中传递String类型的数据,使用的方法为Bundle.putString(stringName,stringValue):

bundle.putDouble("sex",sex);
而要传递Double类型的数据,使用的方法为Bundle.putDouble(doubleName,doubleValue),如下:

bundle.putString("height",height);
反之,若要由Bundle对象中取出数据,则使用Bundle.getString(stringName)、Bundle.getDouble(doubleName) 等相对应的方法即可。

除了上述简单的传递类型之外,尚有String[] 与ArrayList<String> 等封装的方式可供使用

参考。
来源:http://hi.baidu.com/lfcaolibin/blog/item/1e29f7546d7328cfb745aef5.html

分享到:
评论

相关推荐

    在不同Activity之间传递数据的四种常用方法

    在Android中传递数据的方法非常多,本次介绍4中比较常用的数据传递方法: 1.通过Intent传递数据 2.通过静态变量(static)传递数据 3.通过剪贴板(Clipboard)传递数据 4.通过全局对象传递数据 在...

    Android-Activity之间数据传递的多种方式

    本文将详细介绍Android中Activity之间数据传递的多种方式及其适用场景。 一、Intent传递数据 Intent是Android系统中用于启动组件(如Activity)的一种消息对象,同时也可以用来在组件间传递数据。Intent的数据传递...

    activity之间传递文件

    在Android开发中,Activity之间的数据传递是一个常见的任务,特别是在处理文件...开发者需要了解如何创建Intent,如何处理文件路径,以及如何在不同Activity之间共享数据,同时要注意处理Android的不同存储权限策略。

    Activity之间传递数据

    "Activity之间传递数据"这一主题,主要涉及如何使用Intent对象在不同的Activity之间传递各种类型的数据,包括基本数据类型、字符串、数组、集合以及自定义对象等。在Android中,Intent不仅用于启动新的Activity,还...

    Android PopupWindow与Activity之间的数据传递.zip

    1. **Intent**:虽然Intent主要用于Activity之间的数据传递,但也可以用在PopupWindow与Activity之间。例如,当用户在PopupWindow中做出选择后,可以通过Intent将数据传回Activity,然后在Activity中处理这些数据。...

    两个Activity之间传递参数的代码

    在Android应用开发中,Activity是用户界面的基本单元,经常需要在不同的Activity之间传递数据。本篇文章将详细讲解如何在Android的两个Activity之间传递参数,并通过给出的`LoginActivity.java`和`MainActivity.java...

    Activity之间对象传递的两种方式

    在多Activity的应用中,可能需要在不同的Activity之间共享数据,这些数据可能是简单的基本类型,如字符串、整数,也可能是复杂的自定义对象。Android的Intent系统提供了这种数据传递的能力,但默认只能处理基本类型...

    用handler在两个activity之间传递数据

    资源包括如何在一个activity A里激活另一个activity B。...然后在两个activity之间用handler传输数据。在activity A里定义全局变量handler,用sendMessage来发数据,在handler里数据以消息队列的方式发送。

    两个activity之间的数据传递

    在Android应用开发中,Activity是用户界面的基本单元,经常需要在不同的Activity之间传递数据。本教程将详细讲解如何在两个Activity之间实现数据传递,主要涉及三种常见方法:Intent的Extra数据、Bundle对象以及使用...

    Activity review activity之间的数据传递

    "Activity review activity之间的数据传递"这个主题聚焦于如何在不同的Activity之间有效地传递信息。理解并熟练掌握这一技能对于构建功能丰富的Android应用至关重要。 一、Intent:数据传递的主要工具 在Android中...

    利用广播Broadcast Receiver,在2个不同的Activity传递数据

    本教程将深入探讨如何利用BroadcastReceiver在两个不同的Activity之间传递数据。 首先,理解BroadcastReceiver的基本概念。BroadcastReceiver是Android系统中的一个监听器,它可以在后台运行,监听特定的Intent广播...

    Activity之间传递对象的Demo

    当我们需要在不同的Activity之间传递数据时,特别是涉及到对象实例的传递,就需要掌握特定的技巧。本篇将深入探讨如何在Android中进行Activity间的对象传递,并以"Test001"为例进行演示。 一、Intent:数据传递的...

    activity与activity利用接口相互传递数据

    当我们需要在两个Activity之间传递数据时,通常有多种方法,如Intent、Bundle、静态变量、文件、数据库等。本教程将聚焦于一种更为灵活的方式:通过接口进行数据传递。这种方式在某些复杂场景下特别有用,例如当数据...

    通过Intent实现Activity之间的切换,并传递数据

    在Android应用开发中,Intent是一种强大的机制,用于在组件之间建立通信桥梁,特别是在Activity之间进行切换和数据传递。本文将详细讲解如何通过Intent实现Activity之间的切换,并探讨如何利用Intent进行数据传递。 ...

    Activity之间的简单数据传递

    Activity之间的通信是Android系统中不可或缺的一部分,本教程将详细讲解如何在不同的Activity之间进行简单数据传递。 一、基本概念 Activity间的数据传递主要通过Intent进行。Intent不仅用于启动新的Activity,还能...

    安卓开发-Activity间数据传递和回传

    本文将详细介绍如何在两个`Activity`(假定为A和B)之间传递数据以及如何实现数据回传。 #### Activity间数据传递 假设我们有两个`Activity`:A和B。我们需要从A向B传递一些数据,以便B能够根据这些数据执行特定的...

    Activity间图片传递(3种方法)

    或者,如果使用ContentProvider,需要在AndroidManifest.xml中注册,并在发送和接收Activity之间通过Uri传递。 这三种方法各有优缺点,开发者应根据实际需求和图片大小来选择合适的方式。在处理图片传递时,还需...

    Fragment 与 Activity之间传递数据

    本篇将深入探讨Fragment与Activity之间的数据传递,以及如何通过setArguments方法实现这一过程。 首先,了解Fragment的基本概念。Fragment具有自己的生命周期,可以有自己的布局,也可以处理用户事件。它可以在不同...

    android Activity之间数据传递 Parcelable和Serializable接口的使用

    android Activity之间数据传递 Parcelable和Serializable接口的使用的具体实例代码,详情请看&gt;http://blog.csdn.net/js931178805/article/details/8268144

    android Activity之间的数据传递

    本教程将深入探讨如何在Android的Activity之间传递数据,以及如何在启动的Activity销毁后,主Activity能接收到返回的结果。 首先,我们要了解Activity间的启动模式。Android提供了四种启动模式:标准模式(Standard...

Global site tag (gtag.js) - Google Analytics