Android菜鸟的成长笔记(10)——使用Bundle在Activity之间传值

本文介绍了在Android应用中如何使用Intent和Bundle在不同Activity间传递数据。包括基本的使用方法、示例代码及如何通过startActivityForResult返回结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面我们了解了如何启动一个Activity,一个Activity在启动另外一个Activity的时候可能会遇到需要传值的需要。Activity之间传值是通过Bundle来实现的。

一、通过Bundle传值介绍

Intent提供了多个重载方法来携带数据

putExtras(Bundle data):向Intent中放入需要的数据包

Bundle getExtras():取出Intent所携带的数据

putExtras(String name, Xxx value):向Intent中按照key-value形式传值

getXxxExtra(String name):从Intent中按key取值

从上面方法中可以看到Bundle就像一个数据包一样,Bundle中存取数据的方法如下:

pubXxx(String key, Xxx data):向Bundle中放入数据

pubSerializable(String key, Serializable data):向Bundle中放入一个可序列化的对象。

getXxx(Strign key):从Bundle中取出数据

getSerializable(String key, Serializable data):从Bundle中取出一个可序列化的对象。

Bundle对象是由系统需要时自动创建的,我们不需要管。

二、通过Bundle传值例子

MainActivity.java中的核心代码

  1. Intent intent = new Intent();  
  2. intent.setAction("com.example.intent.action.TEST_ACTION");  
  3.                   
  4. intent.putExtra("test1"1);  
  5.                   
  6. Bundle bundle = new Bundle();  
  7. bundle.putBoolean("test2"false);  
  8. bundle.putSerializable("test3"new Person("大碗干拌"2));  
  9. intent.putExtras(bundle);  
  10.                   
  11. startActivity(intent);  
Person.java类

  1. package com.example.testintent;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. public class Person implements Serializable{  
  6.     private String name;  
  7.     private int age;  
  8.       
  9.     public Person(String name, int age) {  
  10.         super();  
  11.         this.name = name;  
  12.         this.age = age;  
  13.     }  
  14.     public String getName() {  
  15.         return name;  
  16.     }  
  17.     public void setName(String name) {  
  18.         this.name = name;  
  19.     }  
  20.     public int getAge() {  
  21.         return age;  
  22.     }  
  23.     public void setAge(int age) {  
  24.         this.age = age;  
  25.     }  
  26.       
  27.     @Override  
  28.     public String toString() {  
  29.         // TODO Auto-generated method stub  
  30.         return "姓名:" + name +", " + "年龄:" + age;  
  31.     }  
  32. }  
SecondActivity.java

  1. public class SecondActivity extends Activity{  
  2.     @Override  
  3.     protected void onCreate(Bundle savedInstanceState) {  
  4.       
  5.         super.onCreate(savedInstanceState);  
  6.         Intent intent = getIntent();  
  7.         Bundle bundle = intent.getExtras();  
  8.           
  9.         System.out.println(bundle.getInt("test1"));  
  10.         System.out.println(bundle.getBoolean("test2"));  
  11.         System.out.println(intent.getSerializableExtra("test3"));  
  12.     }  
  13. }  
运行结果

三、通过Bundle返回结果

前面已经提到过了,Activity还提供了一个startActivityForResult(Intent intent, int requestCode)方法来启动其他Activity。这样就需要如下两个条件:

1、当前Activity需要重写onActivityResult(int requestCode, int resultCode, Intent intent)方法来获取返回的数据。

2、被启动的Activty需要调用setResult方法设置处理结果。

四、通过Bundle返回处理结果例子

将上面的代码中startActivity改成startActivityForResult

  1. Bundle bundle = new Bundle();  
  2. bundle.putBoolean("test2"false);  
  3. bundle.putSerializable("test3"new Person("大碗干拌"2));  
  4. intent.putExtras(bundle);  
  5.                   
  6. startActivityForResult(intent, 0);  
SecondActivity.java

  1. package com.example.testintent;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Intent;  
  5. import android.os.Bundle;  
  6.   
  7. public class SecondActivity extends Activity{  
  8.     @Override  
  9.     protected void onCreate(Bundle savedInstanceState) {  
  10.       
  11.         super.onCreate(savedInstanceState);  
  12.         Intent intent = getIntent();  
  13.         Bundle bundle = intent.getExtras();  
  14.           
  15.         System.out.println(bundle.getInt("test1"));  
  16.         System.out.println(bundle.getBoolean("test2"));  
  17.         System.out.println(intent.getSerializableExtra("test3"));  
  18.           
  19.         intent.putExtra("test4""返回值");  
  20.         setResult(0, intent);  
  21.         finish();  
  22.     }  
  23. }  
在MainActivity中重写onActivityResult方法

  1. @Override  
  2. protected void onActivityResult(  
  3.         int requestCode, int resultCode, Intent intent) {  
  4.     if(requestCode == 0 && resultCode == 0){  
  5.         Bundle data = intent.getExtras();  
  6.         System.out.println(data.getString("test4"));  
  7.     }  
  8. }  
执行结果


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值