`
nanjingjiangbiao_T
  • 浏览: 2572585 次
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

不同Activity之间传递数据--Bundle对象和startActivityForResult方法的实现

 
阅读更多

首先,由于Activity是Android四大组件之一,如果一个应用程序中包含不止一个Activity,则需要在AndroidManifest.xml文件中进行声明。

例如进行如下的声明(程序中包含两个Activity):

 <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>
      <activity android:name="EX03_10_1"></activity>

下面以两个例子说明不同的Activity之间传递数据的方法。

1.使用Bundle对象传递数据

传递数据使用的方法如下:

      /*new一个Intent对象,并指定class*/
        final 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); 

接收数据使用的方法如下:

   /* 取得Intent中的Bundle对象 */
    Bundle bunde = this.getIntent().getExtras();
    
    /* 取得Bundle对象中的数据 */
    String sex = bunde.getString("sex");
    double height = bunde.getDouble("height");

下面给出具体的实现代码:

1.1 主程序代码(第一个Activity)

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*/
        final 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); 
        } 
      }); 
    }
  }

1.2 第二个Activity的实现代码:

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;
  }
}


2.返回数据到前一个Activity

这里需要使用startActivityForResult方法

传递数据的方法与上一个例子是类似的,实现的代码如下:

       /*new一个Intent对象,并指定class*/ 
        Intent intent = new Intent(); 
        intent.setClass(EX03_11.this,EX03_11_1.class);
        /*new一个Bundle对象,并将要传递的数据传入*/
        Bundle bundle = new Bundle(); 
        bundle.putDouble("height",height);
        bundle.putString("sex",sex); 
        /*将Bundle对象assign给Intent*/ 
        intent.putExtras(bundle); 
        /*调用Activity EX03_11_1*/ 
        startActivityForResult(intent,0); 

注意:这里需要实现一个重载的方法:

protected void onActivityResult (int requestCode, int resultCode, Intent data) 

在另一个Activity中获取数据的代码与上一个例子是相同的,实现如下:

/* 取得Intent中的Bundle对象 */ 
    intent=this.getIntent(); 
    bunde = intent.getExtras(); 
    /* 取得Bundle对象中的数据 */ 
    String sex = bunde.getString("sex");
    double height = bunde.getDouble("height"); 

下面给出这个例子的具体实现代码:

2.1 主程序的实现:

public class EX03_11 extends Activity {
  
  private EditText et; 
  private RadioButton rb1; 
  private RadioButton rb2; 
  /** 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) { 
        /*取得输入的身高*/ 
        et = (EditText) findViewById(R.id.height);
        double height=Double.parseDouble(et.getText().toString()); 
        /*取得选择的性别*/
        String sex="";
        rb1 = (RadioButton) findViewById(R.id.sex1); 
        rb2 = (RadioButton) findViewById(R.id.sex2); 
        if(rb1.isChecked()) { sex="M"; 
        }else{
          sex="F"; 
          } 
        /*new一个Intent对象,并指定class*/ 
        Intent intent = new Intent(); 
        intent.setClass(EX03_11.this,EX03_11_1.class);
        /*new一个Bundle对象,并将要传递的数据传入*/
        Bundle bundle = new Bundle(); 
        bundle.putDouble("height",height);
        bundle.putString("sex",sex); 
        /*将Bundle对象assign给Intent*/ 
        intent.putExtras(bundle); 
        /*调用Activity EX03_11_1*/ 
        startActivityForResult(intent,0); 
        } 
      }); 
    } 
  /* 重写 onActivityResult()*/
  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    switch (resultCode) { 
      case RESULT_OK: 
        /* 取得数据,并显示于画面上 */
        Bundle bunde = data.getExtras(); 
        String sex = bunde.getString("sex");
        double height = bunde.getDouble("height"); 
        et.setText(""+height);
        if(sex.equals("M")) {
          rb1.setChecked(true); 
          }
        else{
          rb2.setChecked(true); 
          } break;
          default: break;
          } 
    } 
  }

2.2 另一个Activity的实现:

public class EX03_11_1 extends Activity { 
  
  Bundle bunde; 
  Intent intent; 
  /** Called when the activity is first created. */
  @Override 
  public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    /* 载入mylayout.xml Layout */ 
    setContentView(R.layout.myalyout);
    
    /* 取得Intent中的Bundle对象 */ 
    intent=this.getIntent(); 
    bunde = intent.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+"公斤"); 
    /* 以findViewById()取得Button对象,并加入onClickListener */ 
    Button b1 = (Button) findViewById(R.id.button1);
    b1.setOnClickListener(new Button.OnClickListener() {
      public void onClick(View v) { 
        /* 回传result回上一个activity */ 
        EX03_11_1.this.setResult(RESULT_OK, intent); 
        /* 关闭activity */ EX03_11_1.this.finish(); 
        } 
      });
    } 
  /* 四舍五入的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; 
    } 
  }


分享到:
评论

相关推荐

    基于startActivityForResult方法处理两个Activity之间数据传递问题

    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实现Activities之间进行数据传递的方法

    本文实例讲述了Android实现Activities之间进行数据传递的方法。分享给大家供大家参考。具体分析如下: 首先,先说明一下Activity的启动及关闭: 1. startActivity(Intent intent); 启动Activity  finish(); 结束...

    Google.Android.SDK开发范例大全

     3.10 不同Activity之间的数据传递——Bundle对象的实现   3.11 返回数据到前一个Activity——startActivityForResult方法   3.12 具有交互功能的对话框——AlertDialog窗口   3.13 置换文字颜色的机关...

    Google Android SDK开发范例大全 源码

     3.10 不同Activity之间的数据传递——Bundle对象的实现   3.11 返回数据到前一个Activity——startActivityForResult方法   3.12 具有交互功能的对话框——AlertDialog窗口   3.13 置换文字颜色的机关...

    实验四-Android基本组件交互实验.doc

    startActivityForResult ——跳转到下一个Activity,而当这个Activity被关闭以后,自动跳转前一个Activity ,并调用onActivityResult( )方法,参数为Intent和requestcode 2. Intent Android基本的设计理念是鼓励...

    Android startActivityForResult实例详解

    startActivityForResult用于两个activity之间的数据传递,Activity1传值给Activity2,Activity2再返回值给Activity1。 第一步:Activity1中:startActivityForResult(Intent intent, Int requestCode) Intent ...

    Google Android SDK开发范例大全(PDF高清完整版3)(4-3)

    3.10 不同Activity之间的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 3.12 具有交互功能的对话框——AlertDialog窗口 3.13 置换文字颜色的机关——Button与TextView...

    Google Android SDK开发范例大全(PDF完整版4)(4-4)

    3.10 不同Activity之间的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 3.12 具有交互功能的对话框——AlertDialog窗口 3.13 置换文字颜色的机关——Button与TextView...

    Google Android SDK开发范例大全(PDF高清完整版1)(4-1)

    3.10 不同Activity之间的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 3.12 具有交互功能的对话框——AlertDialog窗口 3.13 置换文字颜色的机关——Button与TextView...

    Google Android SDK开发范例大全的目录

    3.10 不同Activity之间的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 3.12 具有交互功能的对话框——AlertDialog窗口 3.13 置换文字颜色的机关——Button与TextView...

    Google Android sdk 开发范例大全 部分章节代码

    3.10 不同Activity之间的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 3.12 具有交互功能的对话框——AlertDialog窗口 3.13 置换文字颜色的机关——Button与TextView...

    Google Android SDK 开发范例大全01

    3.10 不同Activity之间的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 3.12 具有交互功能的对话框——AlertDialog窗口 3.13 置换文字颜色的机关——Button与TextView...

    Google Android SDK 开发范例大全02

    3.10 不同Activity之间的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 3.12 具有交互功能的对话框——AlertDialog窗口 3.13 置换文字颜色的机关——Button与TextView...

    Google+Android+SDK开发范例大全

    3.8 手机页面的转换——setContentView的应用 3.9 调用另一个Activity——Intent对象的使用 3.10 不同Activity之间的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 ...

    Google Android SDK开发范例大全(完整版附部分源码).pdf

    3.10 不同Activity之间的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 3.12 具有交互功能的对话框——AlertDialog窗口 3.13 置换文字颜色的机关——Button与...

    Google Android SDK开发范例大全(完整版)

    3.10 不同Activity之间的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 3.12 具有交互功能的对话框——AlertDialog窗口 3.13 置换文字颜色的机关——Button与TextView...

    安卓记事本

    // 每一个intent都会带一个Bundle型的extras数据。 Bundle extras = getIntent().getExtras(); if (extras != null) { String title = extras.getString(SecondAtivity.KEY_TITLE); String body = ...

Global site tag (gtag.js) - Google Analytics