I would suggest using a wrapper class nonetheless, just because it's much simpler in Kotlin than in Java. @Parcelize
supports HashMap
, the problem is that it doesn't support IntRange
(or at least it isn't listed). But based on the example there, it seems this should work:
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>)
and your calls become
outState.putParcelable("saved_map", IntRangeStringMap(map))
val map = bundle.getParcelable("saved_map").value
You can even get it looking the way you want by adding extension functions.