Android Intent 매개 변수 전송(객체 복합 컬렉션과 같은 다각적 전송 포함)
4230 단어 Android 기본 개발 제품군
첫 번째 방법: 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의 수명 주기가 가장 길고 단일 모드이기 때문에 집합 대상은 모두 이런 방식을 사용할 수 있다.