安卓类——使用Bundle在Activity之间传值

原文链接:http://blog.csdn.net/dawanganban/article/details/19285071?utm_source=tuicool&utm_medium=referral


前面我们了解了如何启动一个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中的核心代码

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类

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

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。这样就需要如下两个条件:

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

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

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

将上面的代码中startActivity改成startActivityForResult

Bundle bundle = new Bundle();  
bundle.putBoolean("test2", false);  
bundle.putSerializable("test3", new Person("大碗干拌", 2));  
intent.putExtras(bundle);  
                  
startActivityForResult(intent, 0);  

SecondActivity.java

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方法

@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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值