繁体   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