接着上一篇文章,下面我们讨论一下如何利用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传递对象和对象集合)
原文地址:http://blog.csdn.net/yayun0516/article/details/46398205