接着上一篇文章,下面我们讨论一下如何利用Parcelable实现Intent之间对象的传递

一、实现对象传递

首先创建User.java实现Parcelable接口:

package org.yayun.demo;
import java.io.Serializable;
import android.R.integer;
import android.os.Parcel;
import android.os.Parcelable;
public class User implements Parcelable {
private String name;
private int level;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public User(String name, int level) {
this.name = name;
this.level = level;
}
public User() {// 构造方法
}
public int describeContents() {// 覆写的方法
return 0;
}
public void writeToParcel(Parcel parcel, int flags) {// 覆写的方法
parcel.writeString(name);
parcel.writeInt(level);
}
public static final Parcelable.Creator<User> CREATOR = new Creator<User>() {//必须实现的方法
public User createFromParcel(Parcel source) {
User user = new User();
user.name = source.readString();
user.level = source.readInt();
return user;
}
public User[] newArray(int size) {
return new User[size];
}
};
}

Parcelable.Creator是必须要实现的,否则会报错:

下面看两个Activity

1.MainActivity.java

package org.yayun.demo;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
private Button button;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); // 生命周期方法
super.setContentView(R.layout.main); // 设置要使用的布局管理器
button = (Button) findViewById(R.id.btn);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
User user1 = new User("yayun", 7);// 实例化对象
Intent intent = new Intent();
intent.setClass(MainActivity.this, LoginActivity.class);
Bundle bundle = new Bundle();
bundle.putParcelable("user", user1);// 序列化
intent.putExtras(bundle);// 发送数据
startActivity(intent);// 启动intent
}
});
}
}

2.LoginActivity.java:

package org.yayun.demo;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
public class LoginActivity extends Activity {
private TextView textView;
User user;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); // 生命周期方法
super.setContentView(R.layout.login); // 设置要使用的布局管理器
textView = (TextView) findViewById(R.id.text);
Intent intent = this.getIntent();
user = (User) intent.getParcelableExtra("user");
textView.setText("用户名:" + user.getName() + "用户等级"
+ String.valueOf(user.getLevel()));
}
}

3.运行实例如下:

可以看到和实现Serialiable接口一样的结果。

二、实现对象集合传递

这里我们只需要改动两个Activity

1.MainActivity.java:

package org.yayun.demo;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
private Button button;
List<User> list=new ArrayList<User>();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); // 生命周期方法
super.setContentView(R.layout.main); // 设置要使用的布局管理器
button = (Button) findViewById(R.id.btn);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
User user1 = new User("yayun", 7);// 实例化对象
User user2=new User("feifei",9);
list.add(user1);
list.add(user2);
Intent intent = new Intent();
intent.setClass(MainActivity.this, LoginActivity.class);
Bundle bundle = new Bundle();
bundle.putParcelableArrayList("list",(ArrayList<User>)list);// 序列化,要注意                                intent.putExtras(bundle);// 发送数据
startActivity(intent);// 启动intent
}
});
}
}

2.LoginActivity.java

package org.yayun.demo;
import java.util.List;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
public class LoginActivity extends Activity {
private TextView textView;
List<User> list;
User user2;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); // 生命周期方法
super.setContentView(R.layout.login); // 设置要使用的布局管理器
textView = (TextView) findViewById(R.id.text);
Intent intent = this.getIntent();
list =  intent.getParcelableArrayListExtra("list");//getParcelableArrayListExtra方法
user2=(User)list.get(1);
textView.setText("用户名:" + user2.getName() + "用户等级"
+ String.valueOf(user2.getLevel()));
}
}

3.运行实例:

运行成功!

最后注意在AndroidManifest.xml文件中配置LoginActivity

总结

1.实现Parcelable接口注意覆写几个方法和实现Parcelable.Creator方法;

2.bundle.putParcelable("user", user1);// 序列化

3.user = (User) intent.getParcelableExtra("user");//获取对象

4.bundle.putParcelableArrayList("list",(ArrayList<User>)list);//存入List对象数组

5.list = intent.getParcelableArrayListExtra("list");//getParcelableArrayListExtra方法获取对象数组

6.系统好像只提供了List对象数组的传递方法,其他集合怎么传递?希望大牛告知。

喜欢的朋友点个赞呗!关注一下呗!谢谢

Intent之对象传递(Parcelable传递对象和对象集合)相关推荐

  1. java intent 传递集合对象_Intent之对象传递(Parcelable传递对象和对象集合)

    接着上一篇文章,以下我们讨论一下怎样利用Parcelable实现Intent之间对象的传递 一.实现对象传递 首先创建User.java实现Parcelable接口: package org.yayu ...

  2. android bundle 对象,Android Bundle传递对象

    首先Android的Bundle是可以传递对象的.我们可以用Bundle b = new Bundle():b.putSerializable("key", 对象引用); 但是这样 ...

  3. JavaScript强化教程——对象的值传递和引用传递

    2019独角兽企业重金招聘Python工程师标准>>> 本文为 H5EDU 机构官方 HTML5培训 教程,主要介绍:JavaScript强化教程--对象的值传递和引用传递 func ...

  4. 向后台接口传递FormData格式的数组对象

    向后台接口传递FormData格式的数组对象 前端利用formData格式进行数据上传,前端formData 传值 和 json传值的区别?

  5. java h5 交互 传数组, JS数组/对象的值为什么变了?你需要深入理解对象的值传递...

    复杂的对象数据处理后,可能发现某个对象值变了,有时却不变. 上述问题往往会困扰 JS初学者,甚至老手也不一定能说出所以然. 本文将对此进行一定深层探究 -- 深入理解 JS中的对象的值传递. Why ...

  6. PHP中对象的引用传递

    很多数据类型都可以写时复制(copy-on-write),如$a=$b,两个变量赋予的值相等. 对于对象就不一样: $box1 = new Parcel(); $box1->destinatio ...

  7. java jython_将对象从Java传递到Jython时保留Java类型

    我想知道当你把它们放在 Java ArrayList中时,是否有可能没有jython automagicaly将java对象转换为python类型. 从jython-console复制的示例: > ...

  8. js中对象参数的传递

    js中对象参数传递都是按值传递,当参数为对象时,传递的是对象的引用地址,函数中改变对象参数的值时,会影响函数外的该对象.但为对象参数重新赋值时,相当于改变了其引用地址,将其指向了其它内存地址,故自然不 ...

  9. android数据回传的代码,android Activity之间数据传递 Parcelable和Serializable接口的使用...

    Activity之间传数据时,为了避免麻烦,往往会将一些值封装成对象,然后将整个对象传递过去.传对象的时候有两种情况,一种是实现Parcelable接口,一种是实现Serializable接口. 0. ...

最新文章

  1. Laravel 集成 JPush 极光推送指北
  2. Windows 中 FS 段寄存器
  3. IP地址分类及子网掩码详解
  4. python continue语句的用法(跳过本次循环,不是跳出整个循环,break才是跳出整个循环)
  5. Docker:Redis启动命令
  6. Visual studio 2013安装及单元测试
  7. php 响应时间,PHP下解决ajax请求服务器响应时间过长问题
  8. Android 系统(60)---JSON
  9. 【Guava】对Guava类库的注释类型 VisibleForTesting的理解
  10. 程序员私活app排行_iOS程序员,失业就等于成为废人?
  11. 远程显示协议 2021-01-04
  12. 【汇编语言】子程序结构
  13. 虚拟服务器不识别网银盾,电脑浏览器无法使用建行E路航网银盾的解决方法
  14. C# 快递单批量打印
  15. 阿里云 mysql参数_阿里云MYSQL数据库怎么修改参数值?
  16. 数据库(MYSQL)之元数据
  17. oracle创建表空间工具,使用sqlplus命令行工具为oracle创建用户和表空间
  18. mysql使用触发器,delete、insert、update触发器
  19. 我的iphone6退货之路
  20. Python3+pygame中国象棋 代码完整 非常好 有效果演示

热门文章

  1. 小米5C解BL锁教程申请BootLoader解锁教程
  2. Wireshark嗅探和协议分析
  3. NCH SoundTap Plus for mac(苹果电脑录音软件)
  4. WINDOWS7-11磁盘分区教程
  5. springboot实现短信发送验证码及消息队列发送注册成功短信
  6. 小学期软件工程团队项目进度5
  7. 安卓开发之Bitmap
  8. 中国最能喝咖啡的城市,找到了
  9. O2OA V4 Build 11.13 发布! 支持语音办公、微信钉钉消息群发
  10. [JVM] 垃圾收集器与内存分配策略