`

使用Intent 在Activity 之间传递参数

阅读更多

在不同的Activity 之间传递参数主要有四种方式:

1. 通过Intent 传递数据

    这是最为常用的参数传递方式,但是被传递的字段或者类都必须实现serializabel 接口

 

public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		switch (id) {
		case R.id.action_new :
			Toast.makeText(this, "create a new file", Toast.LENGTH_SHORT).show();
			
			Intent msgIntent = new Intent(this, MessageActivity.class);
			/**
			 * 使用Intent传递数据:方案一
			 * 前提和局限性: 传递的参数对象必须实现了序列化  serializable interface
			 */
			msgIntent.putExtra("flag", true);
			msgIntent.putExtra("intentName", "MsgIntent");
			SimpleData simpleData = new SimpleData(199938L, "Test Data");
			msgIntent.putExtra("simpleData", simpleData);
			startActivity(msgIntent);
			break;
		case R.id.action_save :
			Toast.makeText(this, "save the file", Toast.LENGTH_SHORT).show();
			break;
		case R.id.action_settings :
			Toast.makeText(this, "The whole setting", Toast.LENGTH_SHORT).show();
			break;
		case R.id.action_about :
			Toast.makeText(this, "show the about message", Toast.LENGTH_SHORT).show();
			break;
		default:
			Toast.makeText(this, "do nothing", Toast.LENGTH_SHORT).show();
			break;
		}
		return super.onOptionsItemSelected(item);
	}

 

方法中使用的JavaBean

/**
 * 
 */
package org.navis.heard.bean;

import java.io.Serializable;

/**
 * Intent 之间传递参数时用到 的 javabean ,
 * 局限性为:必须实现了序列化接口
 * @author navis
 *
 */
public class SimpleData implements Serializable {
	/**
	 * SerialVersionUID
	 */
	private static final long serialVersionUID = -2643114286876340652L;
	private long id;
	private String dataName;

	public SimpleData() {
		super();
	}

	public SimpleData(long id, String dataName) {
		super();
		this.id = id;
		this.dataName = dataName;
	}

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getDataName() {
		return dataName;
	}

	public void setDataName(String dataName) {
		this.dataName = dataName;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	@Override
	public String toString() {
		return "SimpleData [id=" + id + ", dataName=" + dataName + "]";
	}
}

 

 

2. 使用静态变量传递数据

    使用静态变量和JavaEE 中使用的静态变量的方式相同,但是如果项目中使用大量的静态变量会使项目难于维护。

 

3. 通过剪贴板(Cilpboard)传递数据

    剪切板只能存储简单类型数据或者可序列化的对象,对于某些不可序列化的对象如果可以将其转换成字节流(字节数组),也可以将这些对象保存到剪贴板中。

    传输对象

/**
	 * @author navis
	 *
	 */
	private class Data{
		private int id;
		private String name;
		
		public Data(int id, String name) {
			super();
			this.id = id;
			this.name = name;
		}

		@Override
		public String toString() {
			return "Data [id=" + id + ", name=" + name + "]";
		}
	}

    将对象存储到剪贴板中

Data data = new Data(222, "222");
		//获取系统剪贴板对象
		ClipboardManager clipboardManager = (ClipboardManager) 
				getSystemService(Context.CLIPBOARD_SERVICE);
		
		//通过流 将对象写入流 并对字节流进行加密
		ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
		String base64Str = "";
		
		try {
			ObjectOutputStream objectOutputStream = new ObjectOutputStream(arrayOutputStream);
			//将data对象写入对象输出流
			objectOutputStream.writeObject(data);
			//将对象字节流进行编码
			base64Str = Base64.encodeToString(arrayOutputStream.toByteArray(), Base64.DEFAULT);
			
			objectOutputStream.close();
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		//获取存储数据的剪贴板数据对象
		ClipData clipData = ClipData.newPlainText("data", base64Str);
		//设置主剪贴板
		clipboardManager.setPrimaryClip(clipData);

    通过剪贴板获取对象

//从剪贴板中获取对象
		
		//获取系统剪贴板对象
		ClipboardManager clipboardManager = (ClipboardManager) 
				getSystemService(Context.CLIPBOARD_SERVICE);
		//获取编码后的字符串
		String resultString = clipboardManager.getPrimaryClip()
				.getItemAt(0).getText().toString();
		
		byte[] buffer = Base64.decode(resultString, Base64.DEFAULT);
		
		ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(buffer);
		
		ObjectInputStream objectInputStream;
		try {
			objectInputStream = new ObjectInputStream(arrayInputStream);
			Data outData = (Data) objectInputStream.readObject();
			outData.toString();
		} catch (IOException | ClassNotFoundException e) {
			e.printStackTrace();
		}

 

 

4. 通过全局对象传递数据

 

 

分享到:
评论

相关推荐

    Android应用:Intent打开另外一个Activity,Intent拨电话,Intent在2个Activity间传递参数

    Android源代码 演示3个功能: (1)Intent打开另外一个Activity (2)Intent拨电话 (3)Intent在2个Activity间传递数据

    Android intent之间复杂参数传递方法详解

    Intent是Activity与Activity之间,Activity与Service之间传递参数的介质,而这两种通常实现的是Java基本对象类型和String的传递。 在实际项目中,页面之间传值,除了以上几种,经常还有传递Object对象、List类型、...

    Android 中Activity 之间传递参数

    Android 中Activity 之间传递参数 1.传递简单数据 在A Activity中 findViewById(R.id.startBActicityBtn).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i ...

    Android Activity之间相互调用与传递参数的原理与用法分析

    本文实例讲述了Android Activity之间的相互调用与传递参数。分享给大家供大家参考,具体如下: Activity之间是如何调用的 在javaWeb程序中,jsp与jsp之间的调用是通过重定向完成的,而在Android中,Activity与...

    Android Activity中使用Intent实现页面跳转与参数传递的方法

    主要介绍了Android Activity中使用Intent实现页面跳转与参数传递的方法,结合实例形式简单分析了Android中的Activity交互操作相关技巧,需要的朋友可以参考下

    Android利用Intent启动和关闭Activity

    Android应用程序中一般都有多个Activity,在Activity中,通过调用StartActivity方法,并在该方法的参数中传递Intent对象,就可以实现不同Activity之间的切换和数据传递。 通过StartActivity方法传递intent对象来启动...

    Android Activity跳转和listview的使用

    1.使用 Intent 和 Bundle 实现页面之间的参数传递和跳转; 2.ListView 的使用以及 ListView 中 Item 的点击事件处理 3.button点击事件

    Android中Activity之间跳转和参数传递的实例

    一个activity就好比一个网页,此文章讲解怎样创建一个activity并且实现跳转! 一、学习创建Activity 1、新建一个java类,右击src目录,选择new–>class,新的activity需要继承Activity类 2、需要复写onCreate() 例子...

    Android中传值Intent与Bundle的区别小结

    Bundle 翻译成中文的意思是“捆绑”,常用在Activity间传递参数,之前一开始并不太待见,原因是Intent本身就可以传递,Intent.putExtra(“key”, value),为何还要用Bundle呢? 正巧小伙伴问Android传值Intent和...

    Android中的Intent对象完全解析

    Intent 是一个将要执行的动作的抽象的描述,一般来说是作为参数来使用,由Intent来协助完成Android各个组件之间的通讯。比如说调用startActivity()来启动一个activity,或者由broadcaseIntent()来传递给所有感兴趣的...

    Activity切换及传递数据

     使用Intent对象实现Activity切换及传递数据,Intent类在Intent.java中定义。 Activity切换发起方 创建Intent对象 Intent intent=new Intent(CurrentActivity.this,TargetActivity.class); 参数说明: 构造函数: ...

    android不同activity之间共享数据解决方法

    Android中在不同Activity中传递变量,通常使用Intent中Bundle添加变量的操作方法。 保存参数时: 代码如下: Intent intent = new Intent(); intent.setClass(A.this, B.class); Bundle bundle = new Bundle(); ...

    Android编程实现启动另外的APP及传递参数的方法

    本文实例讲述了Android编程实现启动另外的APP及传递参数的方法。分享给大家供大家参考,具体如下: 有时候需要从一个APP中启动另外一个APP,比如Twitter/微信等。 如果你不知道那个APP的Activity,但是知道包名...

    android开发——简易计算器的设计报告.doc

    (2)多个Activity之间的跳转:通过Intent类实现屏幕之间的跳转(包括没有参数关系 和需要传递参数两种情况)。 (3)两个Activity之间进行数据交换:startActivity() 只有Intent一个参数;public void ...

    我的第一个MonoforAndroid应用

    MonoforAndroid初体验,学习怎么使用MonoforAnrdoid创建android应用,如何使用Intent启动Activity,如何在Activity之间传递参数。在OSX系统下准备MonoforAndroid开发环境时比较容易的,只要去Xamarin下载一个在线...

    HurleyWong#TechNote#从一个Activity跳转中某个Activity的指定的Fragment1

    从一个Activity跳转中某个Activity的指定的Fragment首先在该Activity通过Intent跳转时传递一个名为result的参数,然后在跳转

    Activity代理框架AyoActivityNoManifest.zip

    目的在于在Activity之间传递参数时考虑序列化问题,适用于进程内通信提供了一个轻量级的OnActivityResult机制(OnResultCallback,使用方式基本和OnActivity不一样)状态栏一体化的简单封装Activity和Fragment状态...

    Android4.0入门之参数传递4种方式

    Android4.0入门之参数传递4种方式: 1.通过Intent方式传参 2.通过系统剪切板传参、需要对象转化成Base64的字符串进行传递 3.通过Application全局对象传值 4.通过Activity中的静态变量传参

Global site tag (gtag.js) - Google Analytics