Тем не менее, я бы предложил использовать класс-оболочку, просто потому, что в Kotlin он намного проще, чем в Java. @Parcelize
поддерживает HashMap
, проблема в том, что он не поддерживает IntRange
(или, по крайней мере, его нет в списке). Но, исходя из приведенного примера, кажется, что это должно сработать:
object IntRangeParceler : Parceler<IntRange> {
override fun create(parcel: Parcel) = IntRange(parcel.readInt(), parcel.readInt())
override fun IntRange.write(parcel: Parcel, flags: Int) {
parcel.writeInt(value, start)
parcel.writeInt(value, endInclusive)
}
}
@Parcelize
@TypeParceler<IntRange, IntRangeParceler>()
class IntRangeStringMap(val value: HashMap<IntRange, String>)
, и ваши вызовы станут
outState.putParcelable("saved_map", IntRangeStringMap(map))
val map = bundle.getParcelable("saved_map").value
Вы даже можете получить желаемое, добавив функции расширения.