Intent之对象传递(Parcelable传递对象和对象集合)
接着上一篇文章,以下我们讨论一下怎样利用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是必需要实现的,否则会报错:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWF5dW4wNTE2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
以下看两个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("username:" + user.getName() + "用户等级"
+ String.valueOf(user.getLevel())); }
}
3.执行实比例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWF5dW4wNTE2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
能够看到和实现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("username:" + user2.getName() + "用户等级"
+ String.valueOf(user2.getLevel())); }
}
3.执行实例:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWF5dW4wNTE2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWF5dW4wNTE2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
执行成功!
最后注意在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传递对象和对象集合)的更多相关文章
- Activity之间传递数据或数据包Bundle,传递对象,对象序列化,对象实现Parcelable接口
package com.gaojinhua.android.activitymsg; import android.content.Intent; import android.os.Bundle; ...
- 为什么Intent传递对象的时候必须要将对象序列化呢?
Intent可以算是四大组件之间的胶水,比如在Activity1与Activity2之间传递对象的时候,必须要将对象序列化, 可是为什么要将对象序列化呢? Intent在启动其他组件时,会离开当前应用 ...
- 关于intent传递对象后是传递的对象的地址还是对象的拷贝?
var intent = Intent(activity,SingleColorControlActivity::class.java); var bundle = Bundle()// bundle ...
- 关于js对象值的传递
结合红宝书和网上的一些文章,记录下自己对关于js对象的值的传递的一些理解. js对象是保存在堆内存中的,当把对象赋值给变量时,是把对象在堆内存的引用(地址)赋值给了变量,变量通过地址来访问对象.下面来 ...
- js 对象的值传递
一.变量赋值的不同 1.原始值 在将一个保存着原始值的变量复制给另一个变量时,会将原始值的副本赋值给新变量,此后这两个变量是完全独立的. 2.引用值: 在将一个保存着对象内存地址的变量复制给另一个变量 ...
- mybatis由浅入深day01_ 7输入映射(7.1传递pojo的包装对象_7.2#{}与${}_7.3传递简单类型_7.4传递pojo对象_7.5传递hashmap)
7 输入映射 通过parameterType指定输入参数的类型,类型可以是简单类型.hashmap.pojo的包装类型. 7.1 传递pojo的包装对象 7.1.1 需求 完成用户信息的综合查询,需要 ...
- java对象只有值传递,为什么?
在开始深入讲解之前,有必要纠正一下大家以前的那些错误看法了.如果你有以下想法,那么你有必要好好阅读本文. 错误理解一:值传递和引用传递,区分的条件是传递的内容,如果是个值,就是值传递.如果是个引用,就 ...
- Qt 在相同的线程中可以在信号中传递未注册的元对象,在非相同线程中则不能传递未测试的对象,为什么呢?
有兄台知道可以在留言告诉我,万分感谢!!! 需求:需要在多线程中传递未注册的非元对象数据,时间紧急,无法及时更改该传递的数据为元对象,非继承 QObject 这里采用指针方式传递,同时把传递的局部变量 ...
- 前端axios传递一个包含数组的对象到后台,后台可以用String接收,也可以用List集合接收
前端代码: data() { return { listQuery: { date: [], } }}, //查询列表信息getList() { if (this.listQuery.date == ...
随机推荐
- 信息传递(NOIP2015)(寻找最小环。。)
原题传送门 这是一道寻找最小环的题目. 在做的时候给每一个点染色.. 防止再做已经搜过的点(优化) v[]表示是否访问的过,以及第一次访问该点的时间. u[]表示染色.. 这道题还可以用拓补排序做. ...
- UVALIVE 2955 Vivian's Problem
参考: http://blog.csdn.net/acm_cxlove/article/details/7860735 感觉这里需要记录一下 #include <map> #include ...
- UVA 10912 Simple Minded Hashing
题意就略了.刚一看被数据吓住了.看到字符要求严格递增.那么如果字串长大于26那必然方案数目为0:同时1+2+3....+24+25+26=351如果大于这个数也是不可能的 令dp[i][j][k]表示 ...
- 嵌入式Linux中摄像头使用简要整理【转】
转自:http://www.cnblogs.com/emouse/archive/2013/03/03/2941938.html 本文涉及软硬件平台: 开发板:飞凌OK6410 系统:Ubuntu 1 ...
- V4或者V7包重复冲突,但是不知道删除那个的问题
加这行代码在dependencies统一级别 configurations { all*.exclude group: 'com.android.support', module: 'support- ...
- Jquery操作属性选择器
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 使用Vagrant打造Linux开发环境
1.安装Oracle VM VirtualBox.vagrant,安装完成需重启电脑 Oracle VM VirtualBox安装包下载:https://www.virtualbox.org/wiki ...
- OpenCV和Boost C++库的安装
关于一般的安装步骤,此博客给出了详细的OpenCV的安装.一个步骤也不要落下,应该是不会出问题的. 主要的坑在Boost. 不知什么原因,我的电脑装boost_1_62_0-msvc-14.0-64, ...
- disable enable 所有其他表关联的外键
Disable: begin for i in (select constraint_name, table_name from user_constraints where constraint_n ...
- POJ 1769 Minimizing maximizer(DP+zkw线段树)
[题目链接] http://poj.org/problem?id=1769 [题目大意] 给出一些排序器,能够将区间li到ri进行排序,排序器按一定顺序摆放 问在排序器顺序不变的情况下,一定能够将最大 ...