java intent 传递集合对象_Intent之对象传递(Parcelable传递对象和对象集合)
发布日期:2022-02-18 13:08:04 浏览次数:8 分类:技术文章

本文共 4797 字,大约阅读时间需要 15 分钟。

接着上一篇文章,以下我们讨论一下怎样利用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 CREATOR = new Creator() {//必须实现的方法

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是必需要实现的,否则会报错:

Center

以下看两个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.执行实比例如以下:

Center

1e16730a07420c30a531f6676abf1f3c.png

能够看到和实现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 list=new ArrayList();

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)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 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.执行实例:

Center

Center

执行成功!

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

总结

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

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

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

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

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

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

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

谢谢

转载地址:https://blog.csdn.net/weixin_28871097/article/details/114390170 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:mysql远程连接工具 cen_Navicat远程连接Centos数据库Mysql
下一篇:python 写脚本 预约课程_Python盘纪念币系列之三:自动预约脚本编写 03 & 系列总结...

发表评论

最新留言

很好
[***.229.124.182]2024年04月15日 13时46分46秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章