上一篇文章介绍了如何使用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;
publicclassuserimplementsparcelable {
私有字符串名称;
私有级别;
公共字符串获取名称
return name;
}
公共void set name (string name ) {
this.name=name;
}
公共获取级别(
返回级别;
}
公共void set level (int level ) {
this.level=level;
}
公共用户(string name,int level ) {
this.name=name;
this.level=level;
}
公共用户()//构建方法
}
公共说明内容(()/)写入方法
返回0;
}
publicvoidwritetoparcel (parcel parcel,int flags ) )//写入方法
Parcel.writestring(name );
Parcel.writeint(level );
}
publicstaticfinalparcelable.creator creator=new creator () )//必须实现的方法
公共资源框架(parcel source ) {
用户用户=new user (;
user.name=source.readString (;
user.level=source.readInt (;
返回用户;
}
公共用户[ ] new array (intsize ) {
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.onclick listener;
import android.widget.Button;
publicclassmainactivityextendsactivity {
私有button button;
公共语音创建(bundlesavedinstancestate )。
super.oncreate (savedinstancestate; //生命周期方法
super.setcontentview (r.layout.main ); //配置要使用的布局管理器
button=(button ) findviewbyid ) r.id.BTN;
button.setonclicklistener (newonclicklistener ) )。
公共void onclick (viewv ) {
useruser1=newuser('Yayun ',7 ); //实例化对象
Intent intent=new Intent (;
intent.setclass (main activity.this,LoginActivity.class );
p>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.执行实比例如以下:
能够看到和实现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.执行实例:
执行成功!
最后注意在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对象数组的传递方法,其它集合怎么传递?希望kddbl告知。
喜欢的朋友点个赞呗。关注一下呗!
谢谢