核心内容:
一.在 Activity 之间传递简单数据
二.在 Activity 之间传递复杂数据 
三.在 Activity 之间传递自定义值对象
 
软件环境:Android Studio
 
一.在 Activity 之间传递简单数据
主Activity:MainActivity
Intent intent=new Intent(MainActivity.this,AnotherActivity.class);
//加入参数,传递给AnotherActivity
intent.putExtra("data","我是传过来的参数");
startActivity(intent); 
 
目标Activity:AnotherActivity
接收从主Activity传递过来的参数
getIntent().getStringExtra("data");

二.在 Activity 之间传递复杂数据

传递数据包Bundle

Intent intent=new Intent(MainActivity.this,AnotherActivity.class);

Bundle b=new Bundle();
b.putString("name","小明");
b.putInt("age",);
b.putChar("sex",'男'); intent.putExtras(b);
startActivity(intent);

获取数据包Bundle

Intent i=getIntent();
Bundle data=i.getExtras(); TextView tv=(TextView)findViewById(R.id.tv);
tv.setText(String.format("name="+data.getString("name")+",age="+data.getInt("age")+",sex="+data.getChar("sex")+",score="+""));

三.在 Activity 之间传递自定义值对象

所谓的值对象就是自定义的有数据类型的对象,在实际使用当中传递值对象比较实用,所以这里我将着重总结一下这里。

我们新建一个数据类型Student:

这里实现了Serializable这个接口,下文中将详细讲解。

public class Student implements Serializable{
private String name;
private String sex;
private int 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;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} public Student(String name,String sex,int age){
this.name=name;
this.sex=sex;
this.age=age;
}
}

当不实现这个接口,直接把数据传给Intent时,会提示出错。

这里有两种解决的方法,一种是让Student实现java内置的用于序列化的一个接口Serializable,另一种是Android提供的用于序列化的一个接口Parcelable,下面我们一个一个来看:

1.首先让Student implements Serializable接口:

主Activity中:

intent.putExtra("Student",new Student("小明","男",20));

目标Activity中:

Intent i=getIntent();
Student student= (Student) i.getSerializableExtra("Student");
//如下方式即可获取Student的属性值
String name=student.getName();
String sex=student.getSex();
int age=student.getAge();

这个方法效率比较低,所以Android提供了一个专门用于序列化的接口Parcelable,下面就来简单说说这个接口。

2.Parcelable接口

当实现这个接口之后要求我们实现这两个方法,so,实现就好。

这里需要我们手动的去写这些个东东,这是因为它没有全自动化去序列的机制。

public class Student implements Parcelable {
private String name;private int 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;
} public Student(String name,int age){
this.name=name;
this.age=age;
} @Override
public int describeContents() {
return ;
} @Override
public void writeToParcel(Parcel parcel, int i) {
//将这两条数据保存起来用于方便传递
parcel.writeString(getName());
parcel.writeInt(getAge());
} public static final Creator<Student> CREATOR=new Creator<Student>() {
@Override
public Student createFromParcel(Parcel parcel) {
return new Student(parcel.readString(),parcel.readInt());
} @Override
public Student[] newArray(int i) {
return new Student[i];
}
};
}

主Activity中:

intent.putExtra("Student",new Student("小明",));

目标Activity中:

Intent i=getIntent();
Student student=i.getParcelableExtra("Student");
//如下方式即可获取Student的属性值
String name=student.getName();
String sex=student.getSex();
int age=student.getAge();

就这两种接口而言,Parcelable接口更快,但是很多地方需要自己写,对于像我这样的新手菜鸟来说消化它也是够费劲的,希望有大神能给点Android学习路上的经验和建议!!

Android学习总结——Activity之间传递参数的更多相关文章

  1. 【Android 复习】 : Activity之间传递数据的几种方式

    在Android开发中,我们通常需要在不同的Activity之间传递数据,下面我们就来总结一下在Activity之间数据传递的几种方式. 1. 使用Intent来传递数据 Intent表示意图,很多时 ...

  2. Android学习之Activity之间的数据传递

    Activity与Activity之间很多情况下都需要进行数据的传递,下面就用几个简单的例子来看一下. (一).一个Activity启动另一个Activity并将数据传递到这个Activity当中 思 ...

  3. Activity之间传递参数(四)

    --------siwuxie095 获取Activity的返回参数 1.首先修改两个布局文件,都修改为 LinearLayout 布局, 添加orientation属性为:vertical. (1) ...

  4. 在Activity之间传递参数(四)

    获取Activity的返回参数(在参数(三)User的例子的基础上实现): 1.activity_the_aty.xml文件:<EditText android:id="@+id/ed ...

  5. Activity之间传递参数(三)

    ------siwuxie095 传递值对象,即自定义的有数据类型的对象 1.首先 new 一个 class:User,用于创建自定义对象,同时右键 Generate 出 Constructor.se ...

  6. Activity之间传递参数(二)

    ------siwuxie095 传递数据包 1.传递数据包要用到Bundle,MainActivity.java中: package com.siwuxie095.sendargs; import ...

  7. Activity之间传递参数(一)

    -------siwuxie095 传递简单数据 (1)首先创建一个项目:SendArgs (2)选择API:21 Android 5.0 (3)选择 Empty Activity (4)默认 (5) ...

  8. 在Activity之间传递参数(一)

    准备: 一.创建主界面:activity_main.xml文件中<Button android:text="启动另一个Activity" android:id="@ ...

  9. 在Activity之间传递参数(三)——serializable和parcelable的区别

    传递值对象: 一.serializable实现:简单易用 serializable的迷人之处在于你只需要对某个类以及它的属性实现Serializable 接口即可.Serializable 接口是一种 ...

随机推荐

  1. 【转】【经典算法】——KMP,深入讲解next数组的求解

    前言 之前对kmp算法虽然了解它的原理,即求出P0···Pi的最大相同前后缀长度k:但是问题在于如何求出这个最大前后缀长度呢?我觉得网上很多帖子都说的不是很清楚,总感觉没有把那层纸戳破,后来翻看算法导 ...

  2. OpenWrt 学习网址

    http://m.blog.csdn.net/blog/woods2001/8137755

  3. telnet查看memcached运行参数说明

    在Linux/Windows系统中启动memcached的命令请查看http://weilingfeng98.iteye.com/admin/blogs/1741179 启动完memcached服务器 ...

  4. Unix/Linux环境C编程新手教程(22) C/C++怎样获取程序的执行时间

    1.问:知道程序执行时间我们能够做什么? 在<C++应用程序性能优化>一书中,假设大家读过相信大家一定对性能优化这一块很上心,文中总是对优化前后的时间对照很直观给我们一个感受. 那么我们怎 ...

  5. Android应用程序组件Content Provider的共享数据更新通知机制分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6985171 在Android系统中,应用程序组 ...

  6. CSS入门教程——定位(positon)

    CSS入门教程——定位(positon) CSS定位在网页布局中是起着决定性作用.   定位 CSS的定位功能是很强大的,利用它你可以做出各种各样的网页布局.本节就介绍一些CSS常用的定位语句. 1. ...

  7. VS2013报表设计常用表达式

    一.页眉 1."日期"表达式:="日期: "& Today.ToShortDateString() 效果: 2.格式化日期:="日期: &qu ...

  8. Javascript进阶篇——( JavaScript内置对象---上-Date,string,charAt,indexOf,split,substring,substr)笔记整理

    什么是对象JavaScript 中的所有事物都是对象,如:字符串.数值.数组.函数等,每个对象带有属性和方法.对象的属性:反映该对象某些特定的性质的,如:字符串的长度.图像的长宽等:对象的方法:能够在 ...

  9. 【web开发--js学习】functionName 如果是一个属性值,函数将不会被调用

    <html> <head> <meta http-equiv="Content-Type" Content="text/html; char ...

  10. GIS-开发例程、源代码、MapXtreme、Map (转)

    [原创]MapXtreme实用技巧与源码10例 普通图片生成MapInfo格式电子地图的步骤  http://blog.csdn.net/hmbb2008/category/184134.aspx 基 ...