簡體   English   中英

android中的Parcelable是什么

[英]What is Parcelable in android

public static final Parcelable.Creator<MyParcelable> CREATOR
         = new Parcelable.Creator<MyParcelable>() {
     public MyParcelable createFromParcel(Parcel in) {
         return new MyParcelable(in);
     }

     public MyParcelable[] newArray(int size) {
         return new MyParcelable[size];
     }
  };

  private MyParcelable(Parcel in) {
     mData = in.readInt();
  }
}

在我的 Android 課程中,講師使用了這段代碼,但他們並沒有完全解釋這一點。 我該如何解釋這段代碼? 我嘗試閱讀文檔,但未能解釋。

這個概念稱為包裹

Parcelable是Java Serializable的Android實現。 它假定某種結構和處理方式。 與標准Java序列化相比,這種方式可以相對快速地處理Parcelable。

為了將您的自定義對象解析為其他組件,他們需要實現android.os.Parcelable接口。 它還必須提供一個稱為CREATOR的靜態最終方法,該方法必須實現Parcelable.Creator接口。

您編寫的代碼將成為您的模型類。

您可以在Activity中使用Parcelable,例如:

intent.putExtra("student", new Student("1")); //size which you are storing

並得到這個對象:

Bundle data = getIntent().getExtras();
Student student = (Student) data.getParcelable("student");

學生是模型班級的名稱。 用你的替換它。

簡單來說,Parcelable用於將模型類的整個對象發送到另一個頁面。

在您的代碼中,它在模型中,並且將int值大小存儲到Parcelable對象中,以便在其他活動中發送和檢索。

參考:

教程1

教程2

教程3

-->可包裹在 Android

用於將數據傳遞給 Android 組件的 Bundle object 是專門對象的鍵/值存儲。 它類似於 Map 但只能包含這些特殊對象

您可以將以下對象類型放入 Bundle 中:

細繩

原語

可序列化

可包裹

如果您需要通過 Bundle 傳遞您的客戶對象,您應該實現 Parcelable 接口。

-->實施 Parcelable

您可以為此創建一個 POJO class,但您需要添加一些額外的代碼以使其成為Parcelable 看一下實現。

 public class Student implements Parcelable{
        private String id;
        private String name;
        private String grade;
     
        // Constructor
        public Student(String id, String name, String grade){
            this.id = id;
            this.name = name;
           this.grade = grade;
       }
       // Getter and setter methods
       .........
       .........
       
       // Parcelling part
       public Student(Parcel in){
           String[] data = new String[3];
    
           in.readStringArray(data);
           this.id = data[0];
           this.name = data[1];
           this.grade = data[2];
      }
    
       @override
       public int describeContents(){
           return 0;
      }
    
       @Override
       public void writeToParcel(Parcel dest, int flags) {
           dest.writeStringArray(new String[] {this.id,
                                               this.name,
                                               this.grade});
       }
       public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
           public Student createFromParcel(Parcel in) {
               return new Student(in); 
           }
    
           public Student[] newArray(int size) {
               return new Student[size];
           }
       };
   }

一旦你創建了這個class,你可以像這樣通過Intent輕松傳遞這個class的對象,並在目標活動中恢復這個object。

   intent.putExtra("student", new Student("1","Mike","6"));

在這里,student 是您從包中解包數據所需的密鑰。

   Bundle data = getIntent().getExtras();
   Student student = data.getParcelable("student");

此示例僅顯示 String 類型。 但是,您可以打包任何類型的數據。 試試看。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM