Android Intent 매개 변수 전송(객체 복합 컬렉션과 같은 다각적 전송 포함)

Intent로 데이터를 전달할 때 만약에 전달하는 것이 기본적인 유형이라면 쉽게 전달할 수 없다. 단일한 것은 단일한 전송이고 여러 개는 bundle로 전달한다. 만약에 전달하는 것이 대상이나 집합이라면 간단한 어떤 집합은 직접 전달할 수 있지만 대부분은 전달할 수 없다.대상을 전달할 때 두 가지 방식이 있는데 하나는 Parcelable 또는 Serializable 인터페이스의 서열화 대상을 실현하여 전달하는 것이다. 집합을 전달할 때 간단한 집합을 통해 복잡한 집합을 끼워서 전달할 수 있지만 이런 방식은 매우 번거롭고 복잡하기 때문에 이따가 제가 편리하고 간단한 방식을 소개하겠습니다.
첫 번째 방법: Parcelable 또는 Serializable 인터페이스의 서열화된 대상을 실현하여 전달한다
Student 솔리드 구현 인터페이스 Serializable 코드
package com.jky.activityparams;

import java.io.Serializable;

//Serializable  , 
public class Student implements Serializable {

	public String name;
	public int age;
	public boolean isSingle = false;

	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + ", isSingle="
				+ isSingle + "]";
	}

}

Friend 솔리드의 인터페이스 Parcelable 구현 코드
package com.jky.activityparams;

import android.os.Parcel;
import android.os.Parcelable;

// Parcelable 
// Java C++ 
//QQ QQ 
public class Friend implements Parcelable {

	public String name;
	public int age;
	public boolean gender;

	public Friend(String name, int age, boolean gender) {
		super();
		this.name = name;
		this.age = age;
		this.gender = gender;
	}

	// 
	public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
		//  
		public Friend createFromParcel(Parcel in) {
			//  
			String name = in.readString();
			int age = in.readInt();
			int g = in.readInt();
			boolean gender = false;
			if (g == 1) {
				gender = true;
			}
			return new Friend(name, age, gender);
		}

		//  , 
		public Friend[] newArray(int size) {
			return new Friend[size];
		}
	};

	//  0, 
	@Override
	public int describeContents() {
		return 0;
	}

	//  
	// writeToParcel Parcel
	@Override
	public void writeToParcel(Parcel dest, int flags) {
		//  
		dest.writeString(this.name);
		dest.writeInt(this.age);
		if (this.gender) {
			dest.writeInt(1);
		} else {
			dest.writeInt(0);
		}
	}

	@Override
	public String toString() {
		return "Friend [name=" + name + ", age=" + age + ", gender=" + gender
				+ "]";
	}

}

전달자의Activity 코드, 여기는Activity가 아닐 수 있습니다. 여기의 demo는Activity라고 적혀 있습니다.
public void jump(View btn){
	// SecondActivity
	// 
	Intent intent = new Intent(this, SecondActivity.class);
		
	//Activity 
	//1. 
	//intent.putExtra("name", " ");
		
	//2. 
	/*Bundle data = new Bundle();
	data.putString("name", " ");
	data.putInt("age", 18);
	data.putBoolean("isSingle", false);
	intent.putExtra("data", data);*/
		
	//3. Serializable 
	/*Student s = new Student(" ",18);
	intent.putExtra("data", s);*/
		
	//4. parcelable 
	// : 
	Friend f = new Friend(" ",18,false);
	intent.putExtra("data", f);
	startActivity(intent);
}

수신자 코드
4
	// 
	Intent intent = getIntent();
		
	//1.
	/*String name = intent.getStringExtra("name");
	Log.d("geek", name);*/
	
	//2.Bundle
	/*Bundle data = intent.getBundleExtra("data");
	String name = data.getString("name");
	Log.d("geek", name);*/
		
	//3.Serializable 
	/*Student s = (Student)intent.getSerializableExtra("data");
	Log.d("geek", s.toString());*/
		
	//4.parcelable  
	Friend f = intent.getParcelableExtra("data");
	Log.d("geek", f.toString());
첫 번째 방식은 바로 이렇게 서열화된 방식으로 대상의 전달을 실현하여 여러분에게 알리는 것입니다. 이어서 두 번째 간단한 방식을 소개하겠습니다.
첫 번째 방법: Application 클래스를 상속하여
하위 클래스에서 공통 변수 정의하기
4
/***   Remove */
public Map datas = new HashMap<>();
전달자
4
EntityTest entityTest = new EntityTest();		
caHyApplication1.datas.put("entityTest",entityTest);	
수신자
EntityTest entityTest = (EntityTest) caHyApplication.datas.get(name);

데이터를 얻은 후에 기억해야 할
caHyApplication.datas.remove(name);

Application의 수명 주기가 가장 길고 단일 모드이기 때문에 집합 대상은 모두 이런 방식을 사용할 수 있다.

좋은 웹페이지 즐겨찾기