在前面已经实现了界面之间的跳转,然而实际开发中,界面跳转一般伴随着数据传递。那么安卓里面如何进行数据传递呢?这里还是需要用到Intent。
我们知道使用Intent对象,可以实现页面跳转,其实intent还可以携带任意数据。
上面这张图是Intent携带数据的方法的一部分包含了所有的基本类型。那么复合类型的数据如何传递呢?对象又如何传递呢?
一、复合类型的传递
从上面的图中,我们可以看到,除了基本类型外,intent还可以携带bundle和intent对象。那么bundle是个什么样的类呢?让我们看一看它的方法:
从上图可以知道,bundle主要是用来存储数据的,它是以键值对的形式存放数据,形式上有点像map。因此bundle可以用来存放多个基本数据,再将bundle用intent携带到另一个activity,即可达到传递复杂数据的目的。
起始activity中传值的代码:
public void sendArgs(View v){ Intent intent=new Intent(MainActivity.this,SecondActivity.class); //一、传递简单类型数据 //intent.putExtra("msg", "传递过来的数据是:welcome!"); //二、传递复杂类型的数据 Bundle bundle=new Bundle(); bundle.putString("name", "mike"); bundle.putInt("age", 19); ArrayList<String> sList=new ArrayList<String>(); sList.add("1"); sList.add("2"); sList.add("3"); bundle.putStringArrayList("list", sList); intent.putExtras(bundle); startActivity(intent); }
目的activity接受值的代码:
//接收简单类型数据 // Intent i=getIntent();//接收intent对象 // TextView tv=(TextView)findViewById(R.id.showMsgText); // tv.setText(i.getStringExtra("msg")); //接受复杂类型的数据 // Intent i=getIntent(); // Bundle data=i.getExtras(); // TextView tv=(TextView)findViewById(R.id.showMsgText); // String str=String.format("name=%s;age=%s;list【1】=%s",data.getString("name"),data.getInt("age"),data.getStringArrayList("list")); // tv.setText(str);
二、对象的传递
在程序中,我们经常用到对象,对象的传递也是比较常见的。在上面我们只是说了基本类类型以及由基本类型组成的复合类型的数据传递,那么当要传递的数据中含有对象时,是不是有什么特别的地方呢?答案是肯定的。传递的对象必须实现序列化接口android.os.Parcelable或java.io.Serializable。肯定有人会问:这两个接口有什么区别吗?为什么不用同一个呢?区别肯定是有的。java.io.Serializable是java提供的一个序列化接口,虽然也可以将对象序列化,但将对像序列化的操作交给了后台处理,我们使用时代码简单,但程序的执行效率低,这里就不做详细的说明。android.os.Parcelable是针对安卓系统提供的对象序列化的接口, 它里面含有两个方法public void writeToParcel(Parcel dest, int flags) 和public int describeContents(),使用时,我们需要实现这两个方法。因为针对每个不同的对象,我们是手动实现序列化的,依次程序执行效率会比较高。对象序列化代码如下:
package com.example.learningtext1_sendargs; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; public class User implements Parcelable{ private String name; private int age; private String id; public User(String name, int age, String id) { super(); this.name = name; this.age = age; this.id = id; } 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; } public String getId() { return id; } public void setId(String id) { this.id = id; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { Bundle bundle=new Bundle(); bundle.putString("name", getName()); bundle.putInt("age", getAge()); bundle.putString("id", getId()); dest.writeBundle(bundle); } public static final Creator<User> CREATOR =new Creator<User>() { @Override public User createFromParcel(Parcel source) { Bundle bundle=source.readBundle(); return new User(bundle.getString("name"),bundle.getInt("age"),bundle.getString("id")); } @Override public User[] newArray(int size) { return new User[size]; } }; }
传递对象的代码如下:
//三、传递自定义数据类型(对象),对象必须序列化 User user=new User("小明", 18, "110"); intent.putExtra("user", user); startActivity(intent);
接受对象的代码如下:
User user=(User)i.getParcelableExtra("user"); String str=String.format("name=%s;age=%s;id=%s",user.getName(),user.getAge(),user.getId()); tv.setText(str);
上面已经简单介绍了从当前activity到目的activity的传值问题,那么如何从目的activity返回值到当前activity呢?我们需要在当前activity中重写onActivityResult方法
protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); //通过requestCode和resultCode来判断用户的事件类型 showMsgText.setText("requestCode="+requestCode+",resultCode="+resultCode+","+data.getStringExtra("returnMsg")); }
目的activity传递返回值的代码如下:setResult方法
backBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent i=new Intent(); i.putExtra("returnMsg", returnText.getText().toString()); //i.putExtra("returnMsg", "returnText.getText().toString()"); SecondActivity.this.setResult(1, i); finish();//结束当前的acticvity } });
注意,当需要返回值时,启动activity时,要用startActivityForResult(intent, 0);函数
源码见附件
相关推荐
本文将详细介绍Android中Activity之间数据传递的多种方式及其适用场景。 一、Intent传递数据 Intent是Android系统中用于启动组件(如Activity)的一种消息对象,同时也可以用来在组件间传递数据。Intent的数据传递...
android Activity之间数据传递 Parcelable和Serializable接口的使用的具体实例代码,详情请看>http://blog.csdn.net/js931178805/article/details/8268144
当我们需要在不同的Activity之间传递数据时,特别是涉及到对象实例的传递,就需要掌握特定的技巧。本篇将深入探讨如何在Android中进行Activity间的对象传递,并以"Test001"为例进行演示。 一、Intent:数据传递的...
1. **Intent**:虽然Intent主要用于Activity之间的数据传递,但也可以用在PopupWindow与Activity之间。例如,当用户在PopupWindow中做出选择后,可以通过Intent将数据传回Activity,然后在Activity中处理这些数据。...
在Android开发中,Activity之间的数据传递是一个常见的任务,特别是在处理文件操作时。"activity之间传递文件"这个主题涉及了Android的Intent机制、文件系统管理以及可能的存储权限问题。在这个场景下,用户需要将名...
在Android应用开发中,Activity是用户界面的基本单元,经常需要在不同的Activity之间传递数据。本篇文章将详细讲解如何在Android的两个Activity之间传递参数,并通过给出的`LoginActivity.java`和`MainActivity.java...
"Activity之间传递数据"这一主题,主要涉及如何使用Intent对象在不同的Activity之间传递各种类型的数据,包括基本数据类型、字符串、数组、集合以及自定义对象等。在Android中,Intent不仅用于启动新的Activity,还...
资源包括如何在一个activity A里激活另一个activity B。...然后在两个activity之间用handler传输数据。在activity A里定义全局变量handler,用sendMessage来发数据,在handler里数据以消息队列的方式发送。
本篇文章将详细探讨在Android中Activity之间对象传递的两种主要方式:Parcelable和Serializable接口的使用。 首先,我们来理解为什么需要在Activity之间传递对象。在多Activity的应用中,可能需要在不同的Activity...
在Android中传递数据的方法非常多,本次介绍4中比较常用的数据传递方法: 1.通过Intent传递数据 2.通过静态变量(static)传递数据 3.通过剪贴板(Clipboard)传递数据 4.通过全局对象传递数据 在...
在Android应用开发中,Activity是用户界面的基本单元,经常需要在不同的Activity之间传递数据。本教程将详细讲解如何在两个Activity之间实现数据传递,主要涉及三种常见方法:Intent的Extra数据、Bundle对象以及使用...
"Activity review activity之间的数据传递"这个主题聚焦于如何在不同的Activity之间有效地传递信息。理解并熟练掌握这一技能对于构建功能丰富的Android应用至关重要。 一、Intent:数据传递的主要工具 在Android中...
当我们需要在两个Activity之间传递数据时,通常有多种方法,如Intent、Bundle、静态变量、文件、数据库等。本教程将聚焦于一种更为灵活的方式:通过接口进行数据传递。这种方式在某些复杂场景下特别有用,例如当数据...
在Android应用开发中,Intent是一种强大的机制,用于在组件之间建立通信桥梁,特别是在Activity之间进行切换和数据传递。本文将详细讲解如何通过Intent实现Activity之间的切换,并探讨如何利用Intent进行数据传递。 ...
或者,如果使用ContentProvider,需要在AndroidManifest.xml中注册,并在发送和接收Activity之间通过Uri传递。 这三种方法各有优缺点,开发者应根据实际需求和图片大小来选择合适的方式。在处理图片传递时,还需...
本文将详细介绍如何在两个`Activity`(假定为A和B)之间传递数据以及如何实现数据回传。 #### Activity间数据传递 假设我们有两个`Activity`:A和B。我们需要从A向B传递一些数据,以便B能够根据这些数据执行特定的...
Activity之间的通信是Android系统中不可或缺的一部分,本教程将详细讲解如何在不同的Activity之间进行简单数据传递。 一、基本概念 Activity间的数据传递主要通过Intent进行。Intent不仅用于启动新的Activity,还能...
本篇将深入探讨Fragment与Activity之间的数据传递,以及如何通过setArguments方法实现这一过程。 首先,了解Fragment的基本概念。Fragment具有自己的生命周期,可以有自己的布局,也可以处理用户事件。它可以在不同...
本教程将深入探讨如何在Android的Activity之间传递数据,以及如何在启动的Activity销毁后,主Activity能接收到返回的结果。 首先,我们要了解Activity间的启动模式。Android提供了四种启动模式:标准模式(Standard...
Activity之间的相互调用和参数传递是Android应用中的常见操作,理解并掌握这些技能对于开发高效、流畅的应用至关重要。本篇文章将深入探讨Activity间的通信机制以及如何在调用过程中传递参数。 首先,我们来看...