2

問題は、インターフェイスを実装するパーセルブルに効率的にパーセリングを実装する方法です。

私はこのケースを持っています。2 つの具象クラス (下の図を参照) と、Parcelable である必要があるコンテナー (PictureProviders) によって実装されるインターフェイス。

質問は次のとおりです。画像のリストを効率的に分割するにはどうすればよいですか?

  1. readTypedList に渡す作成者がわからないため、read/writeTypedList を使用できません。
  2. read/writeParcelableArray を使用できますが、これは List を配列にコピーすることを意味します。また、どのクラスローダーを使用しますか? getClass().getClassLoader() は大丈夫でしょうか?
  3. read/writeList を使用することもできます。どのクラスローダーを使用しますか? getClass().getClassLoader() は大丈夫でしょうか?

サンプルコード:

public interface PictureProvider extends Parcelable {
  public Collection<Picture> getAvailablePictures(); 
}

public class SimplePictureProvider implements PictureProvider {

  // ...

  private List<Picture> pictures;

  public SimplePictureProvider(Parcel in) {
    // THIS IS WHERE THE QUESTION APPLIES
  }

  @Override
  public void writeToParcel(Parcel dest, int flags) {
    // THIS IS WHERE THE QUESTION APPLIES
  }

  public int describeContents() {
    return 0;
  }

  public static final Parcelable.Creator<SimplePictureProvider> CREATOR = new Parcelable.Creator<SimplePictureProvider>() {
    public SimplePictureProvider createFromParcel(Parcel in) {
      return new SimplePictureProvider(in);
    }

    public SimplePictureProvider[] newArray(int size) {
      return new SimplePictureProvider[size];
    }
  };
}

public interface Picture extends Parcelable {
  public byte[] getPictureData();
}

public class RemotePicture implements Picture {

  // ...

  private String pictureUrl;

  public RemotePicture(Parcel in) {
    pictureUrl = in.readString();
  }

  @Override
  public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(pictureUrl);
  }

  public int describeContents() {
    return 0;
  }

  public static final Parcelable.Creator<RemotePicture> CREATOR = new Parcelable.Creator<RemotePicture>() {
    public RemotePicture createFromParcel(Parcel in) {
      return new RemotePicture(in);
    }

    public RemotePicture[] newArray(int size) {
      return new RemotePicture[size];
    }
  };
}

public class LocalPicture implements Picture {

  // ...

  private String picturePath;

  public LocalPicture(Parcel in) {
    picturePath = in.readString();
  }

  @Override
  public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(picturePath);
  }

  public int describeContents() {
    return 0;
  }

  public static final Parcelable.Creator<LocalPicture> CREATOR = new Parcelable.Creator<LocalPicture>() {
    public LocalPicture createFromParcel(Parcel in) {
      return new LocalPicture(in);
    }

    public LocalPicture[] newArray(int size) {
      return new LocalPicture[size];
    }
  };
}
4

2 に答える 2

0

writeParcelableArrayサイズが変わらないことがわかっていて、*Listサイズが動的に変化する場合は、 を選択します。null基本/デフォルトのクラスローダーを使用するには、クラスローダーとして渡します。

于 2013-06-10T16:39:52.487 に答える
0

getClass().getClassLoader() で read/writeList を使用しましたか? それは仕事をするようです。

于 2013-06-24T18:38:52.010 に答える