Activity之间的数据传递—实现Parcelable接口
一、单向传递数据和接收
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接口相关推荐
- 【好文推荐】Activity之间的数据传递方法汇总
在Activity间传递的数据一般比较简单,但是有时候实际开发中也会传一些比较复杂的数据,本节一起来学习更多Activity间数据的传递方法. 1.通过 Intent 传递 我们在进行 Activit ...
- Android中Activity之间的数据传递(Intent和Bundle)
当一个Activity启动另一个Activity时,常常会有一些数据传过去,对于Activity之间的数据交换更简单,因为两个Activity之间进行数据传递交换更简单,因为两个Activity之间本 ...
- Android--Activity的跳转及Activity之间的数据传递
Activity的跳转及Activity之间的数据传递(作业) 首先呢,看到这个作业第一感觉并不难,因为只是涉及到多activity之间的跳转以及简单的数据传递而已.然后,做的时候也没花费多长的时间, ...
- Activity的创建步骤+Activity之间的数据传递+案例(人品测试器)
Android的四大组件: 1.activity(多层界面运用) 2.广播接收者 3.服务 4.内容提供者 此外,我这里还会说道 5.多媒体编程(图形.声音.视频) 6.Fragment+动画 7.S ...
- Android中的数据传递之Parcelable接口
对于Android来说传递复杂类型,主要是将自己的类转换为基础的字节数组,Activity之间传递数据是通过Intent实现的. Android序列化对象主要有两种方法,实现Serializable接 ...
- android activity之间传递对象,Android Activity之间的数据传递
一.通过startActivity来进行Activity的传值 在Android中,如果我们要通过一个Activity来启动另一个Activity,可以使用 startActivity(Intent ...
- Activity之间的数据传递
一.向下传递,AActivity->BActivity override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(sa ...
- Activity之间的数据传递方法汇总系列教学
近日一好友去阿里面试,面试失败了,分享了一个他最不擅长的算法面试题.题目是这样的. 题目:给定一个二叉搜索树(BST),找到树中第 K 小的节点. 出题人:阿里巴巴出题专家:文景/阿里云 CDN 资深 ...
- android 打印流程图,Android实现Activities之间进行数据传递的方法
本文实例讲述了Android实现Activities之间进行数据传递的方法.分享给大家供大家参考.具体分析如下: 首先,先说明一下Activity的启动及关闭: 1. startActivity(In ...
最新文章
- C++中四种强制类型转换的区别
- 关于学习的一则小故事
- laytpl : 一款非常轻量的JavaScript模板引擎
- PHP判断变量内容是什么编码(gbk?utf-8) mb_detect_encoding
- iostat来对linux硬盘IO性能进行了解
- 计算机科学与技术专业实习招聘,中科院研究生院招聘GIS或计算机专业实习生
- 网页百度云盘服务器有点忙,百度网盘使用提示网络异常,建议使用三种解决方法...
- 荔枝直播助手无法连接到服务器,荔枝FM直播助手pc客户端
- Java开源博客源码完整汇总(持续更新)
- cass道路设计教程_cass道路设计
- Android如何制作本地音乐播放器,简单实现Android本地音乐播放器
- WordPress外贸网站速度优化的四个层次
- 一个前端面试官的自白:Connecting the Dots
- 【寒江雪】Go实现Builder Pattern
- 基于ESP32CAM的物联网相机系统⑧(用原生JavaWeb实现双摄像头WIFI图传)
- php redis 防超卖,redis防止抢购商品超卖
- 什么样的自学Java网站才适合学习者?
- 挖矿木马应急响应指南
- Duplicate class okhttp3...
- 华为设备常见AAA操作