android中传递复杂参数,activity之间和fragment之间的bundle传递集合/对象
2016-09-28 21:39
573 查看
在Android开发中,Activity之间通过Intent使用bundle,fragment之间和Activityty通过setArguments使用bundle,对于一些简单的参数传递比较简单,而且方式也有多种,这个就不介绍了。在这里介绍一下复杂的参数传递,比如传递集合ArrayList,对象ArrayList<Object>。
无论是Activity之间参数传递,还是Fragment之间参数传递,或者是Activity与Fragment之间,都要使用Bundle,方式基本相同。Bundle在这里就相当与一个介质,把数据捆绑在一起;
但是对于一些对象的传递,我们则需要把被传递的对象需要先实现序列化,而序列化对象有两种方式:java.io.Serializable和android.os.Parcelable
Java中使用的是Serializable,而谷歌在Android使用了自定义的Parcelable。
两种序列化方式的区别:
1.在使用内存的时候,Parcelable比Serializable性能高,推荐使用Parcelable类;
2.Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC;
3.Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下,这种情况建议使用Serializable。
Activity跳转到另一个Activity,
第一步
;定义序列化实体类
Serializable方式:
[java] view
plain copy
public class StudentSer implements Serializable {
private String name;
private int age;
private String habby;
private String title;
public StudentSer() {
super();
}
public StudentSer(String name, int age, String habby, String title) {
super();
this.name = name;
this.age = age;
this.habby = habby;
this.title = title;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getHabby() {
return habby;
}
public void setHabby(String habby) {
this.habby = habby;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", habby=" + habby
+ ", title=" + title + "]";
}
}
第二步;传递序列化对象对象
[java] view
plain copy
// 点击跳转第二个Acitivity
Intent intent = new Intent(MainActivity.this,
SecondActivity.class);
Bundle bundle = new Bundle();
bundle.putSerializable("data", data);
intent.putExtras(bundle);
startActivity(intent);
第三步;接收序列化对象
[java] view
plain copy
// 获取bundle传递过来的数据
Intent intent = getIntent();
data = (ArrayList<StudentSer>) intent.getSerializableExtra("data");
Activity传递参数到fragment
Parcelable方式
第一步 ;定义序列化实体类
[java] view
plain copy
public class StudentPar implements Parcelable {
private String name;
private int age;
private String habby;
private String title;
public StudentPar() {
super();
}
public StudentPar(String name, int age, String habby, String title) {
super();
this.name = name;
this.age = age;
this.habby = habby;
this.title = title;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getHabby() {
return habby;
}
public void setHabby(String habby) {
this.habby = habby;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", habby=" + habby
+ ", title=" + title + "]";
}
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
public static final Parcelable.Creator<StudentPar> CREATOR = new Creator<StudentPar>() {
@Override
public StudentPar createFromParcel(Parcel source) {
// TODO Auto-generated method stub
StudentPar stu = new StudentPar();
stu.name = source.readString();
stu.age = source.readInt();
stu.habby = source.readString();
stu.title = source.readString();
return stu;
}
@Override
public StudentPar[] newArray(int size) {
// TODO Auto-generated method stub
return new StudentPar[size];
}
};
/** 讲实体类数据写入Parcel */
@Override
public void writeToParcel(Parcel dest, int flags) {
// TODO Auto-generated method stub
dest.writeString(name);
dest.writeInt(age);
dest.writeString(habby);
dest.writeString(title);
}
}
第二步,传递序列化对象
[java] view
plain copy
Fragment fragment = new MyFragment();
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
Bundle bundle = new Bundle();
bundle.putParcelableArrayList("fragData", fragData);// ("fragData",fragData);
fragment.setArguments(bundle);
ft.replace(R.id.fram, fragment, "myFragment");
ft.commit();
第三步;接收参数
[java] view
plain copy
Bundle bundle = getArguments();
ArrayList<StudentPar> fragData = bundle.getParcelableArrayList("fragData");
总结,传递对象可以通过Serializable和Parcelable,无论是Activity之间还是fragment之间或者Activity和fragment之间的参数传递,都大同小异,切记被传递的对象要实现Serializable和Parcelable;Serializable相对比较简单很多。使用哪一种方式视情况而定。
转自:http://blog.csdn.net/Kern_/article/details/45974527
无论是Activity之间参数传递,还是Fragment之间参数传递,或者是Activity与Fragment之间,都要使用Bundle,方式基本相同。Bundle在这里就相当与一个介质,把数据捆绑在一起;
但是对于一些对象的传递,我们则需要把被传递的对象需要先实现序列化,而序列化对象有两种方式:java.io.Serializable和android.os.Parcelable
Java中使用的是Serializable,而谷歌在Android使用了自定义的Parcelable。
两种序列化方式的区别:
1.在使用内存的时候,Parcelable比Serializable性能高,推荐使用Parcelable类;
2.Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC;
3.Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下,这种情况建议使用Serializable。
Activity跳转到另一个Activity,
第一步
;定义序列化实体类
Serializable方式:
[java] view
plain copy
public class StudentSer implements Serializable {
private String name;
private int age;
private String habby;
private String title;
public StudentSer() {
super();
}
public StudentSer(String name, int age, String habby, String title) {
super();
this.name = name;
this.age = age;
this.habby = habby;
this.title = title;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getHabby() {
return habby;
}
public void setHabby(String habby) {
this.habby = habby;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", habby=" + habby
+ ", title=" + title + "]";
}
}
第二步;传递序列化对象对象
[java] view
plain copy
// 点击跳转第二个Acitivity
Intent intent = new Intent(MainActivity.this,
SecondActivity.class);
Bundle bundle = new Bundle();
bundle.putSerializable("data", data);
intent.putExtras(bundle);
startActivity(intent);
第三步;接收序列化对象
[java] view
plain copy
// 获取bundle传递过来的数据
Intent intent = getIntent();
data = (ArrayList<StudentSer>) intent.getSerializableExtra("data");
Activity传递参数到fragment
Parcelable方式
第一步 ;定义序列化实体类
[java] view
plain copy
public class StudentPar implements Parcelable {
private String name;
private int age;
private String habby;
private String title;
public StudentPar() {
super();
}
public StudentPar(String name, int age, String habby, String title) {
super();
this.name = name;
this.age = age;
this.habby = habby;
this.title = title;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getHabby() {
return habby;
}
public void setHabby(String habby) {
this.habby = habby;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", habby=" + habby
+ ", title=" + title + "]";
}
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
public static final Parcelable.Creator<StudentPar> CREATOR = new Creator<StudentPar>() {
@Override
public StudentPar createFromParcel(Parcel source) {
// TODO Auto-generated method stub
StudentPar stu = new StudentPar();
stu.name = source.readString();
stu.age = source.readInt();
stu.habby = source.readString();
stu.title = source.readString();
return stu;
}
@Override
public StudentPar[] newArray(int size) {
// TODO Auto-generated method stub
return new StudentPar[size];
}
};
/** 讲实体类数据写入Parcel */
@Override
public void writeToParcel(Parcel dest, int flags) {
// TODO Auto-generated method stub
dest.writeString(name);
dest.writeInt(age);
dest.writeString(habby);
dest.writeString(title);
}
}
第二步,传递序列化对象
[java] view
plain copy
Fragment fragment = new MyFragment();
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
Bundle bundle = new Bundle();
bundle.putParcelableArrayList("fragData", fragData);// ("fragData",fragData);
fragment.setArguments(bundle);
ft.replace(R.id.fram, fragment, "myFragment");
ft.commit();
第三步;接收参数
[java] view
plain copy
Bundle bundle = getArguments();
ArrayList<StudentPar> fragData = bundle.getParcelableArrayList("fragData");
总结,传递对象可以通过Serializable和Parcelable,无论是Activity之间还是fragment之间或者Activity和fragment之间的参数传递,都大同小异,切记被传递的对象要实现Serializable和Parcelable;Serializable相对比较简单很多。使用哪一种方式视情况而定。
转自:http://blog.csdn.net/Kern_/article/details/45974527
相关文章推荐
- android中传递复杂参数,activity之间和fragment之间的bundle传递集合/对象
- android中传递复杂参数,activity之间和fragment之间的bundle传递集合/对象
- Android进阶之Fragment和Activity之间通过setArguments传递复杂参数
- Android Fragment之间参数传递通过Activity中的变量
- android Activity 之间传递复杂对象
- Fragment之间使用Bundle传递对象,数据,序列化,集合
- Android中不同Activity之间传递自定义对象的参数问题的解决
- Android中级教程(三)之不同Activity之间的数据传递---Bundle对象的使用!
- Android学习札记11:利用Parcelable在Activity之间传递对象参数的官方解释和示例
- Android Activity之间实现数据(对象,对象集合)传递
- Android中级教程(三)之不同Activity之间的数据传递---Bundle对象的使用!
- android Activity 之间传递复杂对象
- [Android学习]Activity之间传递对象和对象集合
- Android中级教程(三)之不同Activity之间的数据传递---Bundle对象的使用!
- Android笔记三.不同Activity之间的传递数据(Bundle对象的使用)
- Android判断网络状态是否断开+Android完全关闭应用程序+ 本文讲述了Android中不同Activity之间的数据传递 — Bundle对象的实现(-)+Android中Bundle的使用示例
- Android中级教程之(五)----->不同Activity之间的数据传递,Bundle对象的使用!
- Android中级教程(三)之不同Activity之间的数据传递---Bundle对象的使用!
- Android学习札记14:利用Parcelable在Activity间传递复杂的嵌套ArrayList对象参数
- Android Fragment之间参数传递通过使用bundle进行参数传递