一、单向传递数据和接收

1.可以传递数据类型

  • 传递基本数据类型、字符串和对应的数组
  • 传递Bundle(类似HashMap)
  • 传递对象数据
  • 传递Integer集合、String集合和parcelable集合

2.代码
1)传递和接收基本数据类型、字符串和对应数组

传递:

Intent intent = new Intent(MainActivity.this,Main2Activity.class);
//建立数据
int i = 1;
String s = "hello";
String[] strings = {"ab","cd","ef"};//传递数据
intent.putExtra("int类型数据",i);
intent.putExtra("String类型数据",s);
intent.putExtra("String数组",strings);//跳转页面
startActivity(intent);

接收:

Intent intent = getIntent();//接收数据
String getString = intent.getStringExtra("MainActivity传来的String类型数据");//如果没接收到则返回设置的默认值
int getInt = intent.getIntExtra("MainActivity传来的int类型数据",0);
String[] stingArr = intent.getStringArrayExtra("MainActivity传来的String数组");

2)传递和接收Bundle

传递:

Intent intent = new Intent(MainActivity.this,Main2Activity.class);
//创建bundle
Bundle bundle = new Bundle();//建立数据
int i = 1;
String s = "hello";
String[] strings = {"ab","cd","ef"};//把数据封装到bundle中
//这里的bundle也可以存放对象数据
bundle.putInt("int",i);
bundle.putString("String",s);
bundle.putStringArray("StringArr",strings);//传递bundle
intent.putExtra("bundle",bundle);
//跳转页面
startActivity(intent);

接收:

                Intent intent = getIntent();//接收BundleBundle bundle = intent.getBundleExtra("bundle");//取出Bundle封装的数据int i = bundle.getInt("int");String s = bundle.getString("String");String[] strings = bundle.getStringArray("StringArr");

3)传递和接收对象数据
注意:所传递的对象必须实现Serializable接口或者Parcelable接口

传递实现Serializable接口的对象:

                Intent intent = new Intent(MainActivity.this,Main2Activity.class);//建立对象//注意这里的对象必须实现Serializable接口或者Parcelable接口//这里的User类实现的Serializable接口User user1 = new User(10,"kll",1001);User user2 = new User(11,"momo", 1002);//传递对象intent.putExtra("user1",user1);intent.putExtra("user2",user2);//跳转页面startActivity(intent);

接收实现Serializable接口的对象:

                Intent intent = getIntent();//接收User对象数据User user1 = (User)intent.getSerializableExtra("user1");User user2 = (User)intent.getSerializableExtra("user2");

注:实现Serializable接口方法很简单,只需要在类后面implements Serializable即可!

传递实现Parcelable接口的对象:

                Intent intent = new Intent(MainActivity.this,Main2Activity.class);//建立实现类Parcelable接口的对象Pet petDog = new Pet("白菜",3);Pet petCat = new Pet("地雷",2);//传递对象数据intent.putExtra("宠物狗白菜",petDog);intent.putExtra("宠物猫地雷",petCat);//跳转页面startActivity(intent);

接收实现Parcelable接口的对象:

                Intent intent = getIntent();//接收Pet对象数据Pet pet1 = intent.getParcelableExtra("宠物狗白菜");Pet pet2 = intent.getParcelableExtra("宠物猫地雷");

注:实现Parcelable接口的方式有点复杂,下面开始介绍一个类实现Parcelable接口的方式!

实现Parcelable接口的方式

1.要点:

  • 让类实现Parcelable接口
  • 然后实现接口中的describeContents和writeToParcel方法
  • 要建立一个形参为Parcel的构造器
  • 实例化一个CREATOR常量对象

详细介绍传送门:https://blog.csdn.net/u012702547/article/details/47151001

2.代码

public class Pet implements Parcelable {private String name;private int age;/** 1.先让类实现Parcelable接口* 2.实现接口中的describeContents和writeToParcel方法* *///默认返回0即可@Overridepublic int describeContents() {return 0;}//这里写入对象属性的顺序要与下面读的顺序一致!@Overridepublic void writeToParcel(Parcel dest, int flags) {dest.writeString(name);dest.writeInt(age);}public Pet(Parcel source) {name = source.readString();age = source.readInt();}//实例化一个CREATORpublic static final Creator<Pet> CREATOR = new Creator<Pet>() {//这里返回要求返回new Pet(source)@Overridepublic Pet createFromParcel(Parcel source) {return new Pet(source);}//这里把0改成size即可@Overridepublic Pet[] newArray(int size) {return new Pet[size];}};

二、小结

1.无论是传递基本数据类型、数组、字符串、对象,都是putExtra输入键值对即可
2.接收数据的方式要根据你传递的数据来定

Activity之间的数据传递—实现Parcelable接口相关推荐

  1. 【好文推荐】Activity之间的数据传递方法汇总

    在Activity间传递的数据一般比较简单,但是有时候实际开发中也会传一些比较复杂的数据,本节一起来学习更多Activity间数据的传递方法. 1.通过 Intent 传递 我们在进行 Activit ...

  2. Android中Activity之间的数据传递(Intent和Bundle)

    当一个Activity启动另一个Activity时,常常会有一些数据传过去,对于Activity之间的数据交换更简单,因为两个Activity之间进行数据传递交换更简单,因为两个Activity之间本 ...

  3. Android--Activity的跳转及Activity之间的数据传递

    Activity的跳转及Activity之间的数据传递(作业) 首先呢,看到这个作业第一感觉并不难,因为只是涉及到多activity之间的跳转以及简单的数据传递而已.然后,做的时候也没花费多长的时间, ...

  4. Activity的创建步骤+Activity之间的数据传递+案例(人品测试器)

    Android的四大组件: 1.activity(多层界面运用) 2.广播接收者 3.服务 4.内容提供者 此外,我这里还会说道 5.多媒体编程(图形.声音.视频) 6.Fragment+动画 7.S ...

  5. Android中的数据传递之Parcelable接口

    对于Android来说传递复杂类型,主要是将自己的类转换为基础的字节数组,Activity之间传递数据是通过Intent实现的. Android序列化对象主要有两种方法,实现Serializable接 ...

  6. android activity之间传递对象,Android Activity之间的数据传递

    一.通过startActivity来进行Activity的传值 在Android中,如果我们要通过一个Activity来启动另一个Activity,可以使用 startActivity(Intent ...

  7. Activity之间的数据传递

    一.向下传递,AActivity->BActivity override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(sa ...

  8. Activity之间的数据传递方法汇总系列教学

    近日一好友去阿里面试,面试失败了,分享了一个他最不擅长的算法面试题.题目是这样的. 题目:给定一个二叉搜索树(BST),找到树中第 K 小的节点. 出题人:阿里巴巴出题专家:文景/阿里云 CDN 资深 ...

  9. android 打印流程图,Android实现Activities之间进行数据传递的方法

    本文实例讲述了Android实现Activities之间进行数据传递的方法.分享给大家供大家参考.具体分析如下: 首先,先说明一下Activity的启动及关闭: 1. startActivity(In ...

最新文章

  1. C++中四种强制类型转换的区别
  2. 关于学习的一则小故事
  3. laytpl : 一款非常轻量的JavaScript模板引擎
  4. PHP判断变量内容是什么编码(gbk?utf-8) mb_detect_encoding
  5. iostat来对linux硬盘IO性能进行了解
  6. 计算机科学与技术专业实习招聘,中科院研究生院招聘GIS或计算机专业实习生
  7. 网页百度云盘服务器有点忙,百度网盘使用提示网络异常,建议使用三种解决方法...
  8. 荔枝直播助手无法连接到服务器,荔枝FM直播助手pc客户端
  9. Java开源博客源码完整汇总(持续更新)
  10. cass道路设计教程_cass道路设计
  11. Android如何制作本地音乐播放器,简单实现Android本地音乐播放器
  12. WordPress外贸网站速度优化的四个层次
  13. 一个前端面试官的自白:Connecting the Dots
  14. 【寒江雪】Go实现Builder Pattern
  15. 基于ESP32CAM的物联网相机系统⑧(用原生JavaWeb实现双摄像头WIFI图传)
  16. php redis 防超卖,redis防止抢购商品超卖
  17. 什么样的自学Java网站才适合学习者?
  18. 挖矿木马应急响应指南
  19. Duplicate class okhttp3...
  20. 华为设备常见AAA操作

热门文章

  1. php与web页面交互
  2. Xcode 指定测试设备打包IPA
  3. 利用gp自己做的生成缓冲区的代码
  4. DFN-LOW算法---割点、桥、强连通分量
  5. 【Java从0到架构师】Linux 基础知识、常用命令
  6. 信息系统项目管理通关指南
  7. idea之springboot端口被占用/跳转到login
  8. python中random函数的使用方法 详解
  9. pandas dataframe多重索引常用操作
  10. 用可视化报告拿到20W年终奖的时候,才知道数据可视化的重要