• Android菜鸟的成长笔记(10)——使用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中的核心代码

    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"));
    		}
    	}
    执行结果










  • 相关阅读:
    python播放音频文件
    安装pyaudio
    给 python工程 打包并上传 PyPI (The Python Package Index)
    python怎么import自己写的包
    pip源使用国内镜像
    Git和GitHub
    nginx的日志轮转
    ab接口压力测试工具
    nginx 性能优化
    https协议
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6469209.html
Copyright © 2020-2023  润新知