Intent之对象传递(Parcelable传递对象和对象集合)

时间:2024-08-10 23:04:02

接着上一篇文章,以下我们讨论一下怎样利用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是必需要实现的,否则会报错:

Intent之对象传递(Parcelable传递对象和对象集合)

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

Intent之对象传递(Parcelable传递对象和对象集合)

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWF5dW4wNTE2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

Intent之对象传递(Parcelable传递对象和对象集合)

能够看到和实现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.执行实例:

Intent之对象传递(Parcelable传递对象和对象集合)

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWF5dW4wNTE2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

Intent之对象传递(Parcelable传递对象和对象集合)

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对象数组的传递方法,其它集合怎么传递?希望大牛告知。

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

谢谢