source.readList 的 Parcelable 不适用于 List<String>

source.readList of Parcelable doesn't work over List<String>

此行被 IDE 标记为红色:

mBook.Color=source.readList(Color,Book.class.getClassLoader());

我也改成了

mBook.Color=source.readList(Color,String.class.getClassLoader());

但仍然错误,我认为这是因为我的代码缺少 color 字段的 getter & setter,但是在创建它们之后,还是错了。我确定这不是使字段可分割的方法,但也不知道正确的方法

Book.java :

public class Book implements Parcelable {
   private String bookName;
   private int publishTime;
   private static List<String> Color = Arrays.asList(new String[]{"red","blue"});

   public String getBookName() {
      return bookName;
   }

   public static List<String> getColor() {
      return Color;
   }

   public static void setColor(List<String> Color) {
      Book.Color = Color;
   }

   public void setBookName(String bookName) {
      this.bookName = bookName;

   }

   public int getPublishTime() {
      return publishTime;
   }
   public void setPublishTime(int publishTime) {
      this.publishTime = publishTime;
   }

   public static final Parcelable.Creator<Book> CREATOR = new Creator<Book>() {
      public Book createFromParcel(Parcel source) {
         Book mBook = new Book();
         mBook.bookName = source.readString();
         mBook.publishTime = source.readInt();
         mBook.Color =source.readList(Color,Book.class.getClassLoader());
         return mBook;
      }
      public Book[] newArray(int size) {
         return new Book[size];
      }
   };
   @Override
   public int describeContents() {
      return 0;
   }
   @Override
   public void writeToParcel(Parcel parcel, int flags) {
      parcel.writeString(bookName);
      parcel.writeInt(publishTime);
      parcel.writeList(Color);
   }
}

问题是 readList returns 无效,所以这可能是您的 IDE 所抱怨的。解决方案如下:

 mBook.Color = null;
 source.readList(Color,Book.class.getClassLoader());

希望对您有所帮助。