Android Studio——使用Bundle在Activity之间传值

前面我们了解了如何启动一个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
2
3
4
5
6
7
8
9
10
11
Intent intent = new Intent();
intent.setAction( "com.example.intent.action.TEST_ACTION" );
                 
intent.putExtra( "test1" , 1 );
                 
Bundle bundle = new Bundle();
bundle.putBoolean( "test2" , false );
bundle.putSerializable( "test3" , new Person( "大碗干拌" , 2 ));
intent.putExtras(bundle);
                 
startActivity(intent);
Person.java类

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

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

\

三、通过Bundle返回结果

前面已经提到过了,Activity还提供了一个startActivityForResult(Intent intent, int requestCode)方法来启动其他Activity。这样就需要如下两个条件:<喎�"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+MaGitbHHsEFjdGl2aXR50OjSqtbY0LRvbkFjdGl2aXR5UmVzdWx0KGludCByZXF1ZXN0Q29kZSwgaW50IHJlc3VsdENvZGUsIEludGVudCBpbnRlbnQpt723qMC0u/HIobe1u9i1xMr9vt2hozwvcD4KPHA+MqGisbvG9LavtcRBY3RpdnR50OjSqrX308NzZXRSZXN1bHS3vbeoyejWw7SmwO294bn7oaM8L3A+CjwvYmxvY2txdW90ZT4Ky8Shos2ouf1CdW5kbGW3tbvYtKbA7b3hufvA/dfTPGJyPgo8YmxvY2txdW90ZT4KPHA+vavJz8PmtcS0+sLr1tBzdGFydEFjdGl2aXR5uMSzyXN0YXJ0QWN0aXZpdHlGb3JSZXN1bHQ8L3A+CjxwPjxwcmUgY2xhc3M9"brush:java;">Bundle bundle = new Bundle(); bundle.putBoolean("test2", false); bundle.putSerializable("test3", new Person("大碗干拌", 2)); intent.putExtras(bundle); startActivityForResult(intent, 0);SecondActivity.java

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

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


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值