問題は、インターフェイスを実装するパーセルブルに効率的にパーセリングを実装する方法です。
私はこのケースを持っています。2 つの具象クラス (下の図を参照) と、Parcelable である必要があるコンテナー (PictureProviders) によって実装されるインターフェイス。
質問は次のとおりです。画像のリストを効率的に分割するにはどうすればよいですか?
- readTypedList に渡す作成者がわからないため、read/writeTypedList を使用できません。
- read/writeParcelableArray を使用できますが、これは List を配列にコピーすることを意味します。また、どのクラスローダーを使用しますか? getClass().getClassLoader() は大丈夫でしょうか?
- 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];
}
};
}