2017-05-04 84 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

很好的解释.... –