zoukankan      html  css  js  c++  java
  • 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"));
    		}
    	}
    执行结果










  • 相关阅读:
    array and ram
    char as int
    pointer of 2d array and address
    Install SAP HANA EXPRESS on Google Cloud Platform
    Ubuntu remount hard drive
    Compile OpenSSL with Visual Studio 2019
    Install Jupyter notebook and tensorflow on Ubuntu 18.04
    Build OpenCV text(OCR) module on windows with Visual Studio 2019
    Reinstall VirtualBox 6.0 on Ubuntu 18.04
    Pitfall in std::vector<cv::Mat>
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6469209.html
Copyright © 2011-2022 走看看