Intent之对象传递(Parcelable传递对象和对象集合)
来源:互联网 发布:欧阳娜娜大提琴 知乎 编辑:程序博客网 时间:2024/05/07 03:30
接着上一篇文章,下面我们讨论一下如何利用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对象数组的传递方法,其他集合怎么传递?希望大牛告知。
喜欢的朋友点个赞呗!关注一下呗!谢谢
2 0
- Intent之对象传递(Parcelable传递对象和对象集合)
- Intent 传递对象和集合
- Intent之对象传递(Serializable传递对象和对象集合)
- Intent之对象传递(Serializable传递对象和对象集合)
- android intent传递Parcelable对象
- Intent传递对象parcelable、serializable
- Intent传递Parcelable List对象
- Intent传递Parcelable List对象
- Intent 传递对象 Serializable/Parcelable
- 使用 Intent传递对象(Parcelable方式)
- Android之使用 Intent 传递对象(一)Parcelable 方式
- Android开发实战之Intent传递对象(Serializable和Parcelable)
- android Intent传递对象和集合
- android intent传递对象和集合
- Android中Intent传递对象(Serializable,Parcelable)
- Intent传递实现Parcelable接口对象
- Android Intent传递对象 Serializable & Parcelable
- intent借助parcelable接口传递对象数组
- 二分搜索经典题目
- Android属性动画完全解析(上),初识属性动画的基本用法
- 网络编程
- 数据连接池的工作原理
- 初步了解及熟悉Linux
- Intent之对象传递(Parcelable传递对象和对象集合)
- VS工程如何改变工程名字
- ntel Xeon E5-2658的CPU核ID和线程ID的对应关系
- Mac下建立渗透测试环境:代理工具篇
- 常用的android弹出对话框
- 黑马程序员java学习笔记——集合框架
- “程序员之路”
- 黑客常用命令大全
- Java Note - Operators