にパラメーターがあり、それをシリアル化SparseArray<int[]>
したい。
しかし、writeSparseArray(Object)
for Parcelable はサポートしていないようint[]
です。をシリアル化する他の方法はありますか、またはオブジェクトにSparseArray<int[]>
変更するだけですか?int[]
にパラメーターがあり、それをシリアル化SparseArray<int[]>
したい。
しかし、writeSparseArray(Object)
for Parcelable はサポートしていないようint[]
です。をシリアル化する他の方法はありますか、またはオブジェクトにSparseArray<int[]>
変更するだけですか?int[]
私は Parcel.writeSparseArray() メソッドをチェックしましたが、私の意見では、このメソッドは writeList() のようにジェネリックである必要があるため、いくつかの問題があります。次のようになります。
public final void writeSparseArray(SparseArray<Object> val)
そしてあるべきです
public final void writeSparseArray(SparseArray<? extends Object> val)
また
public final <T> void writeSparseArray(SparseArray<T> val)
また
public final void writeSparseArray(SparseArray val)
そのため、SparseArray オブジェクトに対してこのメソッドの独自の実装を実装する必要があります。それが最善の解決策であるかどうかはわかりませんが、これを試すことができます:
public void writeSparseArray(Parcel dest, SparseArray<int[]> sparseArray) {
if (sparseArray == null) {
dest.writeInt(-1);
return;
}
int size = sparseArray.size();
dest.writeInt(size);
int i=0;
while (i < size) {
dest.writeInt(sparseArray.keyAt(i));
dest.writeIntArray(sparseArray.valueAt(i));
i++;
}
}
private SparseArray<int[]> readSparseArrayFromParcel(Parcel source){
int size = source.readInt();
if (size < 0) {
return null;
}
SparseArray sa = new SparseArray(size);
while (size > 0) {
int key = source.readInt();
int[] value = source.createIntArray();
sa.put(key, value);
size--;
}
return sa;
}