Android에서 Parcelable의 역할 실례 해석

3260 단어 Android
android에서 Parcel 유형을 제공합니다.데이터가 인텐트 또는 IPC를 통해 전달될 수 있는 컨테이너로 사용됩니다.기본 유형을 제외하고 Parcelable 인터페이스를 구현한 클래스만 Parcel에 넣을 수 있습니다.
 
Parcelable 구현 요점: 세 가지를 실현해야 한다
1) writeToParcel 메서드.이 방법은 클래스의 데이터를 외부에서 제공하는 Parcel에 기록합니다.다음과 같이 선언합니다.
writeToParcel(Parcel dest, int flags)의 구체적인 매개 변수 의미는javadoc
2) describeContents 방법.알아내지 못하면 무슨 소용이 있겠는가, 어쨌든 바로 0으로 돌아가도 된다
3) 정적 Parcelable.Creator 인터페이스.이 인터페이스에는 다음과 같은 두 가지 방법이 있습니다.
createFromParcel(Parcel in)에서 클래스의 실례를 만드는 기능
newArray (int size) 는 T, 길이가 size인 그룹을 만듭니다. 한 마디 (return new T[size]) 로 만듭니다.이 방법은 외부 클래스의 반서열화 클래스 그룹에 사용할 수 있을 것으로 추정된다.
테스트용 수신 정보 Activity:

import android.app.Activity;  
 
import android.content.Intent;  
 
import android.os.Bundle;  
import android.os.Parcelable;  
 
public class Test extends Activity {  
   
  @Override 
  public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.main);  
    Intent i = getIntent();  
    Person p = i.getParcelableExtra("yes");  
    System.out.println("---->"+p.name);  
    System.out.println("---->"+p.map.size());  
  }  
} 

보낸 액티비티:

import java.util.HashMap;  
 
import android.app.Activity;  
import android.content.Intent;  
import android.os.Bundle;  
 
public class TestNew extends Activity {  
   
  @Override 
  public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.main);  
    Intent intent = new Intent();  
    Person p = new Person();  
    p.map = new HashMap<String,String>();  
    p.map.put("yes", "ido");  
    p.name="ok";  
    intent.putExtra("yes", p);  
    intent.setClass(this, Test.class);  
    startActivity(intent);  
  }  
} 

Parcelable 구현 클래스:

import java.util.HashMap;  
import android.os.Parcel;  
import android.os.Parcelable;  
 
public class Person implements Parcelable {  
 
  public HashMap<String,String> map = new HashMap<String,String> ();  
    
  public String name ;  
  @Override 
  public int describeContents() {  
    return 0;  
  }  
  @Override 
  public void writeToParcel(Parcel dest, int flags) {  
 
    dest.writeMap(map);  
    dest.writeString(name);  
  }  
  public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {  
// Creator
 
    @Override 
    public Person createFromParcel(Parcel source) {  
      Person p = new Person();  
      p.map=source.readHashMap(HashMap.class.getClassLoader());  
      p.name=source.readString();  
      return p;  
    }  
    @Override 
    public Person[] newArray(int size) {  
      // TODO Auto-generated method stub  
      return null;  
    }  
  };  
 
} 

좋은 웹페이지 즐겨찾기