2017-05-04 85 views
-1

我需要知道如何製作一個嵌套類Parcelable嵌套類Parcelable

當我創建一個嵌套類我得到一個錯誤(這需要包裹的PARAM。)

代碼:因爲Appointment沒有參數的構造函數出現

public class BookingDetailsItem implements Parcelable { 
    private ServiceProviderItem serviceProvider; 

    public Appointment appointmentDetails; 
    private String notes; 

    public BookingDetailsItem(ServiceProviderItem serviceProvider) 
    { 
     this.serviceProvider = serviceProvider; 
     appointmentDetails = new Appointment(); // here it requires the parcel as required parameter 
    } 

    protected BookingDetailsItem(Parcel in) { 
     serviceProvider = in.readParcelable(ServiceProviderItem.class.getClassLoader()); 
     appointmentDetails = in.readParcelable(Appointment.class.getClassLoader()); 
     notes = in.readString(); 
    } 

    public static final Creator<BookingDetailsItem> CREATOR = new Creator<BookingDetailsItem>() { 
     @Override 
     public BookingDetailsItem createFromParcel(Parcel in) { 
      return new BookingDetailsItem(in); 
     } 

     @Override 
     public BookingDetailsItem[] newArray(int size) { 
      return new BookingDetailsItem[size]; 
     } 
    }; 

    public String getNotes() { 
     return notes; 
    } 

    public void setNotes(String notes) { 
     this.notes = notes; 
    } 

    @Override 
    public int describeContents() { 
     return hashCode(); 
    } 

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     dest.writeParcelable(serviceProvider, flags); 
     dest.writeParcelable(appointmentDetails, flags); 
     dest.writeString(notes); 
    } 

    public static class Appointment implements Parcelable { 
     private boolean isPickup; 
     private Date servicingDate; // servicing date and time. In case of pickup, it will be pick up date and time. 

     private String additionalRequirements; 

     protected Appointment(Parcel in) { 
      isPickup = in.readByte() != 0; 
      additionalRequirements = in.readString(); 
     } 

     public static final Creator<Appointment> CREATOR = new Creator<Appointment>() { 
      @Override 
      public Appointment createFromParcel(Parcel in) { 
       return new Appointment(in); 
      } 

      @Override 
      public Appointment[] newArray(int size) { 
       return new Appointment[size]; 
      } 
     }; 

     public boolean isPickup() { 
      return isPickup; 
     } 

     public void setPickup(boolean pickup) { 
      isPickup = pickup; 
     } 

     public Date getServicingDate() { 
      return servicingDate; 
     } 

     public void setServicingDate(Date servicingDate) { 
      this.servicingDate = servicingDate; 
     } 

     public String getAdditionalRequirements() { 
      return additionalRequirements; 
     } 

     public void setAdditionalRequirements(String additionalRequirements) { 
      this.additionalRequirements = additionalRequirements; 
     } 

     @Override 
     public int describeContents() { 
      return hashCode(); 
     } 

     @Override 
     public void writeToParcel(Parcel dest, int flags) { 
      dest.writeByte((byte) (isPickup ? 1 : 0)); 
      dest.writeString(additionalRequirements); 
     } 
    } 
} 

回答

0

錯誤。爲了解決這個問題,只需添加一個無參數的構造函數:

public Appointment() {} 

「爲什麼在我實現Parcelable之前這個工作?你可能會問。這是因爲如果一個類沒有構造函數,那麼爲你自動添加一個無參數的構造函數。因此,在將參數in添加到構造函數後,原始無參數構造函數將丟失。

+0

很好的解釋.... –