在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  

  1. /**
  2. * Activity传递数据的两种方式:
  3. * 1.直接通过Bundle对象来传递
  4. * 2.使用Intent定义的Bundle对象
  5. */
  6. public class FirstActivity extends AppCompatActivity {
  7.  
  8. private EditText ed;
  9. @Override
  10. protected void onCreate(Bundle savedInstanceState) {
  11. super.onCreate(savedInstanceState);
  12. setContentView(R.layout.activity_first);
  13.  
  14. ed = (EditText) findViewById(R.id.et_data_name);
  15. }
  16.  
  17. //传递基本数据
  18. public void sendDataClick(View view){
  19. String info = ed.getText().toString();
  20. Intent intent = new Intent(this,SecondActivity.class);
  21. //1.直接通过Bundle对象来传递
  22. /* Bundle bundle = new Bundle();
  23. bundle.putString("info",info);
  24. intent.putExtra("data",bundle);*/
  25.  
  26. //2.使用Intent定义的Bundle对象
  27. intent.putExtra("info",info);
  28. startActivity(intent);
  29. }
  30.  
  31. //传递对象一
  32. public void sendObjectOneClick(View view){
  33. Cat cat = new Cat();
  34. cat.name = "波斯猫";
  35. cat.age = 5;
  36. cat.type = "英短";
  37.  
  38. Intent intent = new Intent(this,SecondActivity.class);
  39. //putExtra(String name,Serializable value)---Cat.class必须实现Serializable接口
  40. intent.putExtra("cat",cat);
  41. startActivity(intent);
  42. }
  43.  
  44. //传递对象二
  45. public void sendObjectTwoClick(View view){
  46. Dog dog = new Dog();
  47. dog.name = "乐乐";
  48. dog.age = 6;
  49. dog.type = "哈士奇";
  50.  
  51. Intent intent = new Intent(this,SecondActivity.class);
  52. //putExtra(String name,Parcelable value)---Dog.class必须实现SerializableParcelable接口
  53. intent.putExtra("dog",dog);
  54. startActivity(intent);
  55. }
  56.  
  57. }

  

(2)SecondActivity.class

  1. public class SecondActivity extends AppCompatActivity {
  2.  
  3. private TextView tv;
  4. @Override
  5. protected void onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.activity_second);
  8.  
  9. tv = (TextView) findViewById(R.id.tv_data_display);
  10.  
  11. Intent intent = getIntent();
  12. //1.直接通过Bundle对象来传递
  13. /*
  14. Bundle data = intent.getBundleExtra("data");
  15. String ret = data.getString("info");*/
  16.  
  17. //2.使用Intent定义的Bundle对象
  18. String ret = intent.getStringExtra("info");
  19.  
  20. Cat cat = (Cat) intent.getSerializableExtra("cat");
  21.  
  22. Dog dog = (Dog) intent.getParcelableExtra("dog");
  23.  
  24. tv.setText(dog.toString());
  25. }
  26. }

  

(3)activity_first.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:orientation="vertical"
  7. tools:context="com.langdon.taiyang.androidtest.activity.FirstActivity">
  8.  
  9. <EditText
  10. android:id="@+id/et_data_name"
  11. android:hint="请输入信息"
  12. android:layout_width="match_parent"
  13. android:layout_height="wrap_content" />
  14. <Button
  15. android:id="@+id/bt_data_send"
  16. android:text="发送"
  17. android:onClick="sendDataClick"
  18. android:layout_width="match_parent"
  19. android:layout_height="wrap_content" />
  20. <Button
  21. android:id="@+id/bt_data_send_object"
  22. android:text="传递对象一"
  23. android:onClick="sendObjectOneClick"
  24. android:layout_width="match_parent"
  25. android:layout_height="wrap_content" />
  26. <Button
  27. android:id="@+id/bt_data_send_data"
  28. android:text="传递对象二"
  29. android:onClick="sendObjectTwoClick"
  30. android:layout_width="match_parent"
  31. android:layout_height="wrap_content" />
  32. </LinearLayout>

  

(4)activity_second.xml 

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. tools:context="com.langdon.taiyang.androidtest.activity.SecondActivity">
  7. <TextView
  8. android:id="@+id/tv_data_display"
  9. android:text="no data"
  10. android:layout_width="match_parent"
  11. android:layout_height="wrap_content" />
  12. </LinearLayout>

  

(5)Cat.class

  

  1. /**
  2. * Cat实现Serializable接口,
  3. * intent.putExtra(String name,Serializable value)---Cat.class必须实现Serializable接口
  4. */
  5.  
  6. public class Cat implements Serializable {
  7. public String name;
  8. public int age;
  9. public String type;
  10.  
  11. @Override
  12. public String toString() {
  13. return "Cat{" +
  14. "name='" + name + '\'' +
  15. ", age=" + age +
  16. ", type='" + type + '\'' +
  17. '}';
  18. }
  19. }

  

(6)Dog.class

    

  1. /**
  2. * Dog实现Parcelable接口,
  3. * intent.putExtra(String name,Parcelable value)---Cat.class必须实现Parcelable接口
  4. */
  5.  
  6. public class Dog implements Parcelable{
  7. public String name;
  8. public int age;
  9. public String type;
  10.  
  11. @Override
  12. public String toString() {
  13. return "Dog{" +
  14. "name='" + name + '\'' +
  15. ", age=" + age +
  16. ", type='" + type + '\'' +
  17. '}';
  18. }
  19.  
  20. //描述内容
  21. @Override
  22. public int describeContents() {
  23. return 0;
  24. }
  25.  
  26. //将传入的数据写到包裹里面(Parcel)
  27. @Override
  28. public void writeToParcel(Parcel dest, int flags) {
  29. dest.writeString(name);
  30. dest.writeInt(age);
  31. dest.writeString(type);
  32. }
  33.  
  34. //对象的创建器
  35. public static final Parcelable.Creator<Dog> CREATOR
  36. = new Parcelable.Creator<Dog>() {
  37. public Dog createFromParcel(Parcel in) {
  38. Dog dog = new Dog();
  39. dog.name = in.readString();
  40. dog.age = in.readInt();
  41. dog.type = in.readString();
  42. return dog;
  43. }
  44.  
  45. public Dog[] newArray(int size) {
  46. return new Dog[size];
  47. }
  48. };
  49.  
  50. }

  

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. [LeetCode] Anagrams 错位词

    Given an array of strings, return all groups of strings that are anagrams. Note: All inputs will be ...

  2. [开源].NET高性能框架Chloe.ORM-完美支持SQLite

    扯淡 这是一款轻量.高效的.NET C#数据库访问框架(ORM).查询接口借鉴 Linq(但不支持 Linq).借助 lambda 表达式,可以完全用面向对象的方式就能轻松执行多表连接查询.分组查询. ...

  3. websocket初探

    本文尚未完成,在此只写一些句子,以后慢慢整理. 一.参数 IllegalArgumentException No payload parameter present on the method[mes ...

  4. JavaScript简单对象的定义方法

    工厂模式: 初级开发者可能会这样定义对象: var obj = new Object(); obj.name = "hero"; obj.showName=function (){ ...

  5. 理解OAuth 2.0

    转自:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛 ...

  6. 学习ASP.NET 5和MVC6

    今天很荣幸的参加了微软开源跨平台讲座,充分认识了下一个版本的ASP.NET所带来的激动人心的特性.虽然过去已经断断续续的了解了一些ASP.NET5和MVC6与EF7的动态,但是都没有这一次来的系统化( ...

  7. java script 基础知识

    方法:提供信息 函数去处理 给出一个结果 字符类型. 字符提前赋类型 int i=1; money x; float;datetime; decimal;var 万用类型 var a = 1; 1赋值 ...

  8. 在Windows平台上绿色安装postgresQL

    本文使用案例:postgresql-9.6.0-beta3-windows-x64-binaries.rar (win64免安装) 环境:window10,postgresql-9.6.0-beta3 ...

  9. FastDFS 通过文件名获取文件信息

    /** * 获取文件信息 * * param string group_name 文件所在的组名 * param string file_id 文件id(如: M00/09/BE/rBBZolgj6O ...

  10. java学习笔记之线程1

    1.线程的概念 线程是系统中最小的执行单元,同一进程有多个线程,多个线程共享进程的资源. 线程调用yield()方法使线程从运行状态转入可运行状态,让出资源: 线程调用sleep()方法使线程由运行状 ...