Androidで複雑なパラメータを渡し、activity間とfragment間のbundleで集合/オブジェクトを渡します.
Android開発では,Activity間ではIntent経由でbundle,fragment間とActivityty経由でsetArguments経由でbundleを使用しているが,いくつかの簡単なパラメータ伝達は比較的簡単であり,また方式も多様であるため,これは紹介しない.ここでは,伝達集合ArrayList,オブジェクトArrayListのような複雑なパラメータ伝達について説明する.
Activity間のパラメータ転送でもFragment間のパラメータ転送でもActivityとFragment間でもBundleは基本的に同じ方法で使用されます.Bundleはここでメディアに相当し、データを縛っています.
しかし、一部のオブジェクトの転送では、転送されたオブジェクトを先にシーケンス化する必要があります.シーケンス化されたオブジェクトにはjava.io.Serializableとandroid.os.Parcelableの2つの方法があります.
JavaではSerializableを使用していますが、GoogleではAndroidでカスタムParcelableを使用しています.2つのシーケンス化方式の違い:1.メモリを使用する場合、ParcelableはSerializableより性能が高く、Parcelableクラスを推奨する.2.Serializableはシーケンス化時に大量の一時変数を発生し、頻繁なGCを引き起こす.3.Parcelableは、データをディスクに格納する場合に使用できません.Parcelableは、データの持続性が外部で変化することを十分に保証できないため、Serializableを使用することをお勧めします.
Activityは別のActivityにジャンプし、
最初のステップシリアル化されたエンティティークラスの定義
Serializable方式:
Activityパラメータをfragmentに渡す
Parcelable方式の第一歩;シリアル化されたエンティティークラスの定義
ステップ3受信パラメータ
まとめて、伝達対象は
SerializableとParcelableは、Activity間でもfragment間でもActivityとfragment間のパラメータ伝達でも大きく異なり、伝達されたオブジェクトがSerializableとParcelableを実現することを覚えています.Serializableは比較的簡単です.どちらを使うかは状況によって異なります.
はい、皆さんの交流を歓迎します.以下のようにDemoを添付します.
クリックしてリンクを開くhttp://download.csdn.net/detail/kern_/8738587
転載は出典を提示してください.
Activity間のパラメータ転送でもFragment間のパラメータ転送でもActivityとFragment間でもBundleは基本的に同じ方法で使用されます.Bundleはここでメディアに相当し、データを縛っています.
しかし、一部のオブジェクトの転送では、転送されたオブジェクトを先にシーケンス化する必要があります.シーケンス化されたオブジェクトにはjava.io.Serializableとandroid.os.Parcelableの2つの方法があります.
JavaではSerializableを使用していますが、GoogleではAndroidでカスタムParcelableを使用しています.2つのシーケンス化方式の違い:1.メモリを使用する場合、ParcelableはSerializableより性能が高く、Parcelableクラスを推奨する.2.Serializableはシーケンス化時に大量の一時変数を発生し、頻繁なGCを引き起こす.3.Parcelableは、データをディスクに格納する場合に使用できません.Parcelableは、データの持続性が外部で変化することを十分に保証できないため、Serializableを使用することをお勧めします.
Activityは別のActivityにジャンプし、
最初のステップシリアル化されたエンティティークラスの定義
Serializable方式:
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 + "]";
}
}
第2ステップ;シーケンス化オブジェクトの転送 // Acitivity
Intent intent = new Intent(MainActivity.this,
SecondActivity.class);
Bundle bundle = new Bundle();
bundle.putSerializable("data", data);
intent.putExtras(bundle);
startActivity(intent);
第3歩;シーケンス化オブジェクトの受信// bundle
Intent intent = getIntent();
data = (ArrayList) intent.getSerializableExtra("data");
Activityパラメータをfragmentに渡す
Parcelable方式の第一歩;シリアル化されたエンティティークラスの定義
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 CREATOR = new Creator() {
@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);
}
}
第2ステップ、シーケンス化オブジェクトを渡す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();
ステップ3受信パラメータ
Bundle bundle = getArguments();
ArrayList fragData = bundle.getParcelableArrayList("fragData");
まとめて、伝達対象は
SerializableとParcelableは、Activity間でもfragment間でもActivityとfragment間のパラメータ伝達でも大きく異なり、伝達されたオブジェクトがSerializableとParcelableを実現することを覚えています.Serializableは比較的簡単です.どちらを使うかは状況によって異なります.
はい、皆さんの交流を歓迎します.以下のようにDemoを添付します.
クリックしてリンクを開くhttp://download.csdn.net/detail/kern_/8738587
転載は出典を提示してください.