Parcelable 인터페이스 사용
5062 단어 androidParcelable
Parcelable 이 뭐 예요?
Parcelable 은 데 이 터 를 Parcel 에 기록 하고 Parcel 에서 읽 은 인 터 페 이 스 를 정의 합 니 다.하나의 실체 (클래스 로 표시) 가 메시지 에 봉인 되 어야 한다 면 반드시 이 인 터 페 이 스 를 실현 하고 이 인 터 페 이 스 를 실현 해 야 한다. 이 실 체 는 '포장 가능 한' 것 이 된다.
Parcelable 전달 대상
Android 직렬 화 대상 은 주로 두 가지 방법 이 있 습 니 다.
1. Serializable 인 터 페 이 스 를 실현 하고 Serializable 인 터 페 이 스 를 실현 하 는 것 은 JavaSE 자체 가 지원 하 는 것 이다.
2. Parcelable 인 터 페 이 스 를 실현 합 니 다. Parcelable 은 Android 특유 의 기능 으로 Serializable 인 터 페 이 스 를 실현 하 는 것 보다 효율 이 높 습 니 다. 예 를 들 어 Intent 데이터 전달 에 도 지원 되 고 프로 세 스 간 통신 (IPC) 에 도 사용 할 수 있 습 니 다.
기본 유형 을 제외 하고 Parcelable 인 터 페 이 스 를 실현 한 클래스 만 Parcel 에 넣 을 수 있 습 니 다.
Parcelable 인터페이스 정의
public interface Parcelable {
// ,
public int describeContents();
// ,
public void writeToParcel(Parcel dest, int flags);
// , Parcel Parcelable 。 , , 。
// , Creator , 。
public interface Creator<T> {
public T createFromParcel(Parcel source);
public T[] newArray(int size);
}
어떻게 Parcelable 인 터 페 이 스 를 실현 합 니까?
parcelable 인터페이스 정의 에서 볼 수 있 듯 이 parcelable 인 터 페 이 스 를 실현 하려 면 다음 과 같은 몇 가지 방법 이 필요 합 니 다.
1. description Contents 방법.내용 인터페이스 설명, 기본 값 으로 0 을 되 돌려 주면 됩 니 다.
2. writeToParcel 방법.이 방법 은 클래스 의 데 이 터 를 외부 에서 제공 하 는 Parcel 에 기록 합 니 다. 즉, 전달 할 데 이 터 를 Parcel 용기 에 포장 하여 저장 합 니 다. 이 방법 은 다음 과 같 습 니 다.
writeToParcel (Parcel dest, int flags) 의 구체 적 인 매개 변수 의 미 는 javadoc 참조
3. 정적 인 Parcelable. Creator 인터페이스, 이 인 터 페 이 스 는 두 가지 방법 이 있 습 니 다.
createFromParcel(Parcel in) Parcel 용기 에서 전달 데이터 값 을 읽 고 Parcelable 대상 으로 봉 하여 논리 층 으로 되 돌려 줍 니 다.
new Array (int size) 는 T, 길이 가 size 인 배열 을 만 들 고 한 마디 (return new T [size]) 만 사용 하면 됩 니 다. 방법 은 외부 클래스 의 반 직렬 화 를 위 한 것 입 니 다.
코드 구현
1. 데 이 터 를 봉인 하고 parcelable 인 터 페 이 스 를 실현 하 는 Person 대상 을 Two Activity 에 전달 합 니 다.
public class DemoActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//
Person p = new Person();
p.setId(1);
p.setName("xiaoming");
// Intent Person
Intent i = new Intent(this, TwoActivity.class);
i.putExtra("Person", p);
startActivity(i);
}
}
2. Two Activity 는 데 이 터 를 가 져 와 DemoActivity 가 전달 하 는 Person 대상 에서 분석 하고 인쇄 합 니 다.
public class TwoActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
Person p = (Person)getIntent().getParcelableExtra("Person");
System.out.println("p_id"+p.getId());
System.out.println("p_name"+p.getName());
}
}
3. parcelable 인터페이스의 실현
public class Person implements Parcelable{
//
private int id;
private String name;
// 1. Parcelable.Creator , Person , , :
// android.os.BadParcelableException:
// Parcelable protocol requires a Parcelable.Creator object called CREATOR on class com.um.demo.Person
// 2. Percel Person , Person
// 3. Parcelable.Creator CREATOR, ;
// 4. Parcel , ,
// 5.
public static final Parcelable.Creator<Person> CREATOR = new Creator(){
@Override
public Person createFromParcel(Parcel source) {
// TODO Auto-generated method stub
// ,
Person p = new Person();
p.setId(source.readInt());
p.setName(source.readString());
return p;
}
@Override
public Person[] newArray(int size) {
// TODO Auto-generated method stub
return new Person[size];
}
};
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
// TODO Auto-generated method stub
// 1. ,
// 2.
dest.writeInt(id);
dest.writeString(name);
}
}
자, parcelable 인터페이스의 실현, 여기저기 끝!!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.