У меня есть класс,который я хочу сохранить в bundle.Я знаю что для этого нужно implements Parcelable.Там есть два метода:
@Override
public int describeContents ( ){
return 0;
}
И
@Override
public void writeToParcel ( Parcel p1, int p2 ){
}
Что сними нужно делать?
У Bundle есть метод putSerializable. Если Ваш класс помечен аннотацией Serializable, Вы можете передать его экземпляр в Bundle с помощью этого метода.
myBundle.putSerializable("key", myObject);
Для передачи объектов в android есть два способа. Первый, это передавать Serializable, а второй Parcaleble. Serializable использует механизм рефлексии и не требует реализации, нужно только от него наследоваться. Parcelable требует реализации и в нем мы сохраняем каждое поле в так называемые ячейки памяти вручную и он намного быстрее. Для реализации нужно сделать класс наследником Parcelable и переопределить 2 метода.
В методе writeToParcel мы записываем наши поля у объект Parcelable для дальнейшего считывания в конструкторе, здесь важен порядок. В describeContents, если у вас POJO объект нужно возвращать 0. Пример:
class TestModel(val name: String?, val age: Int) : Parcelable {
constructor(parcel: Parcel) : this(parcel.readString(), parcel.readInt())
override fun writeToParcel(dest: Parcel?, flags: Int) {
dest?.writeString(name)
dest?.writeInt(age)
}
override fun describeContents(): Int = 0
companion object CREATOR : Parcelable.Creator<TestModel> {
override fun createFromParcel(parcel: Parcel): TestModel {
return TestModel(parcel)
}
override fun newArray(size: Int): Array<TestModel?> {
return arrayOfNulls(size)
}
}
}
Продвижение своими сайтами как стратегия роста и независимости