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方式:
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
転載は出典を提示してください.