Parcelable و Bundle

دو شی Parcelable و Bundle به منظور پاس دادن داده بین activityها ،برنامه های مختلف و همچنین نگهداری وضعیت در تغییر configurationها (تغییر زبان و یا تغییر جهت تلفن)کاربرد دارند.

برای انتقال داده بین activityهای مختلف می توان از شی Bundle استفاده کرد:

Intent intent = new Intent(this, MyActivity.class);
intent.putExtra("media_id", "a1b2c3");
...
startActivity(intent);

مستندات اندروید نیز پیشنهاد می کنید برای تایپ های ساده مثل int و string از شی Bundle استفاده شود.ولی در صورتیکه نیاز دارید یکه شی پیچیده را بین  activityها جابجا کنید در این صورت نیاز به 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);
           // the order needs to be the same as in writeToParcel() method
           this.id = data[0];
           this.name = data[1];
           this.grade = data[2];
       }

       @Оverride
       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];
           }
       };
   }

همانطور که در بالا مشاهده می کنید برای ایجاد یک Parcelable نیاز است که Parcelable را پیاده سازی کنید.همچنین برای استفاده از آن به شکل زیر باید عمل کنید :

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

گوگل در مستندات اندروید پیشنهاد می کند که در صورتیکه نیاز است بین دو پروسس مجزا داده ای را ارسال کنید از Parcelable سفارشی استفاده نکنید زیرا در این حالت نیاز است که در دو برنامه یک ورژن مشخص از شی مورد نظر نگهدارید.برای مثال در بالا Student در برنامه مبدا و مقصد باید یکی باشد.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *