在Android中,不同的Activity实例可能运行在一个进程中,也可能运行在不同的进程中。因此需要一种特别的机制帮助我们在Activity之间传递消息。Android中通过Intent对象来表示一条消息,一个Intent对象不仅包含有这个消息的目的地,还可以包含消息的内容,好比一封Email,其中不仅应该包含收件地址,还可以包含具体的内容。对于一个Intent对象,消息“目的地”是必须的,而内容是可选的。

1.数据传递的两种方式:

2.对象的传递:

(1)实现Serializable接口,intent.putExtra(String name,Serializable value)

(2)实现Parcelable接口,intent.putExtra(String name,Parcelable value)

3.代码实现

(1)FirstActivity.class  

/**
* Activity传递数据的两种方式:
* 1.直接通过Bundle对象来传递
* 2.使用Intent定义的Bundle对象
*/
public class FirstActivity extends AppCompatActivity { private EditText ed;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first); ed = (EditText) findViewById(R.id.et_data_name);
} //传递基本数据
public void sendDataClick(View view){
String info = ed.getText().toString();
Intent intent = new Intent(this,SecondActivity.class);
//1.直接通过Bundle对象来传递
/* Bundle bundle = new Bundle();
bundle.putString("info",info);
intent.putExtra("data",bundle);*/ //2.使用Intent定义的Bundle对象
intent.putExtra("info",info);
startActivity(intent);
} //传递对象一
public void sendObjectOneClick(View view){
Cat cat = new Cat();
cat.name = "波斯猫";
cat.age = 5;
cat.type = "英短"; Intent intent = new Intent(this,SecondActivity.class);
//putExtra(String name,Serializable value)---Cat.class必须实现Serializable接口
intent.putExtra("cat",cat);
startActivity(intent);
} //传递对象二
public void sendObjectTwoClick(View view){
Dog dog = new Dog();
dog.name = "乐乐";
dog.age = 6;
dog.type = "哈士奇"; Intent intent = new Intent(this,SecondActivity.class);
//putExtra(String name,Parcelable value)---Dog.class必须实现SerializableParcelable接口
intent.putExtra("dog",dog);
startActivity(intent);
} }

  

(2)SecondActivity.class

public class SecondActivity extends AppCompatActivity {

    private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second); tv = (TextView) findViewById(R.id.tv_data_display); Intent intent = getIntent();
//1.直接通过Bundle对象来传递
/*
Bundle data = intent.getBundleExtra("data");
String ret = data.getString("info");*/ //2.使用Intent定义的Bundle对象
String ret = intent.getStringExtra("info"); Cat cat = (Cat) intent.getSerializableExtra("cat"); Dog dog = (Dog) intent.getParcelableExtra("dog"); tv.setText(dog.toString());
}
}

  

(3)activity_first.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.langdon.taiyang.androidtest.activity.FirstActivity"> <EditText
android:id="@+id/et_data_name"
android:hint="请输入信息"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/bt_data_send"
android:text="发送"
android:onClick="sendDataClick"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/bt_data_send_object"
android:text="传递对象一"
android:onClick="sendObjectOneClick"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/bt_data_send_data"
android:text="传递对象二"
android:onClick="sendObjectTwoClick"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>

  

(4)activity_second.xml 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.langdon.taiyang.androidtest.activity.SecondActivity">
<TextView
android:id="@+id/tv_data_display"
android:text="no data"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>

  

(5)Cat.class

  

/**
* Cat实现Serializable接口,
* intent.putExtra(String name,Serializable value)---Cat.class必须实现Serializable接口
*/ public class Cat implements Serializable {
public String name;
public int age;
public String type; @Override
public String toString() {
return "Cat{" +
"name='" + name + '\'' +
", age=" + age +
", type='" + type + '\'' +
'}';
}
}

  

(6)Dog.class

    

/**
* Dog实现Parcelable接口,
* intent.putExtra(String name,Parcelable value)---Cat.class必须实现Parcelable接口
*/ public class Dog implements Parcelable{
public String name;
public int age;
public String type; @Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", age=" + age +
", type='" + type + '\'' +
'}';
} //描述内容
@Override
public int describeContents() {
return 0;
} //将传入的数据写到包裹里面(Parcel)
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(age);
dest.writeString(type);
} //对象的创建器
public static final Parcelable.Creator<Dog> CREATOR
= new Parcelable.Creator<Dog>() {
public Dog createFromParcel(Parcel in) {
Dog dog = new Dog();
dog.name = in.readString();
dog.age = in.readInt();
dog.type = in.readString();
return dog;
} public Dog[] newArray(int size) {
return new Dog[size];
}
}; }

  

Activity系列讲解---数据传递的更多相关文章

  1. activity之间的数据传递方法

    1  基于消息的通信机制 Intent--------boudle,extra 用这种简单的形式,一般而言传递一些简单的类型是比较容易的,如int.string等 详细介绍下Intent机制 Inte ...

  2. Activity之间的数据传递

    最常用的Activity之间的数据传递. btnStartAty1.setOnClickListener(new View.OnClickListener() { @Override public v ...

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

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

  4. Activity之间的数据传递-android学习之旅(四十七)

    activity之间的数据传递主要有两种,一种是直接发送数据,另一种接受新启动的activity返回的数据,本质是一样的 使用Bundle传递数据 Intent使用Bundle在activity之间传 ...

  5. Android 数据传递(一) Activity之间的数据传递

    bundle Google Bundle类说明 Bundle类是一个key-value对.Activity之间的数据通信可以通过bundle类来实现数据的存储.即将数据放入bundle里面,将Bund ...

  6. Activity系列讲解---返回结果的处理

    设想一下:由当前Activity跳转到其它Activity,从其它Activity再返回到当前Activity时,如何获取其它Activity存放的数据?下面用一个例子讲解, 点击selsect按钮跳 ...

  7. Activity与Fragment数据传递之Fragment从Activity获取数据

    整理Fragment与Activity之间的数据交换,大体上包括三种: 1.Fragment从Activity获取数据 2.Activity从Fragment获取数据 3.Fragment之间获取数据 ...

  8. Android笔记——Activity中的数据传递案例(用户注冊)

    1.创建程序activity_main: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/andro ...

  9. Android Activity之间的数据传递

    1.向目标Activity传递数据: Intent intent=new Intent(this,Main2Activity.class); //可传递多种类型的数据 intent.putExtra( ...

随机推荐

  1. hihoCoder太阁最新面经算法竞赛15

    hihoCoder太阁最新面经算法竞赛15 Link: http://hihocoder.com/contest/hihointerview24 题目1 : Boarding Passes 时间限制: ...

  2. Stack的三种含义

    作者: 阮一峰 日期: 2013年11月29日 学习编程的时候,经常会看到stack这个词,它的中文名字叫做"栈". 理解这个概念,对于理解程序的运行至关重要.容易混淆的是,这个词 ...

  3. C语言共用体、大小端、枚举

    1.共用体和结构体的相同和不同 (1)相同点就是操作语法几乎相同.(2)不同点是本质上的不同.struct是多个独立元素(内存空间)打包在一起:union是一个元素(内存空间)的多种不同解析方式. # ...

  4. Android SharedPreferences公共类sharedhelper

    SimpAndroidFarme是近期脑子突然发热想做的android快速开发的框架,目标是模块化 常用的控件,方便新手学习和使用.也欢迎老鸟来一起充实项目:项目地址 sharedpreference ...

  5. 查看mysql语句运行时间的2种方法

    网站运行很慢的时候,我就特别起知道为什么这么慢,所以我查啊查,数据库绝对是很重要的一部分,里面运行的sql是绝对不能放过的.平时做项目的时候,我也会注意sql语句的书写,写出一些高效的sql来,所以我 ...

  6. 几个MQTT的知识点

    开始正文前需要感谢一下网友“小龙”和emqtt.io群里的网友们的帮助,本人刚刚开始使用MQTT有很多不懂的地方,在emqtt.io群里询问解决方法的时候,“小龙”给我详细的讲解了一些MQTT的知识点 ...

  7. Python3 面向对象(基础篇)

    面向对象 关于面向对象的标准定义网上有很多,不再讲述,现在我们来通俗点理解: 面向对象编程相对于面向过程编程和函数式编程来说,看的更长远,实现功能相对更简单. 面向对象:对象就是物体,这种编程思想就是 ...

  8. HDU 4006The kth great number(K大数 +小顶堆)

    The kth great number Time Limit:1000MS     Memory Limit:65768KB     64bit IO Format:%I64d & %I64 ...

  9. web主题公园版权信息破解:script.js加密文件

    很多人会使用web主题公园网站的免费worldpress主题,但它的主题又都被加了版权信息,故意让人找不到版权信息的修改位置. 你如果去footer.php里面删除版权信息(技术支持:web主题公园) ...

  10. PHP中的全局变量global和$GLOBALS的区别

    1.global Global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件. 但是在函数体内定义的global变量,函数体 ...