Как сохранить объект в bundle?

102
19 апреля 2021, 18:00

У меня есть класс,который я хочу сохранить в bundle.Я знаю что для этого нужно implements Parcelable.Там есть два метода:

    @Override
          public int describeContents ( ){
                        return 0;
                 }

И

    @Override
          public void writeToParcel ( Parcel p1, int p2 ){
                 }

Что сними нужно делать?

Answer 1

У Bundle есть метод putSerializable. Если Ваш класс помечен аннотацией Serializable, Вы можете передать его экземпляр в Bundle с помощью этого метода.

myBundle.putSerializable("key", myObject);
Answer 2

Для передачи объектов в 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)
        }
    }
}
READ ALSO
Selenium scroll по дереву элементов

Selenium scroll по дереву элементов

У меня есть веб элемент дерово, элементы которого появляются по мере скролинка по нему

68
Как задать setFixedSize для Texture View

Как задать setFixedSize для Texture View

В SurfaceView есть метод setFixedSize, чтобы фиксированно установить размер отображаемого видеоКак установить такой же фиксированный размер для TextureView?

85
Возвратить общую сумму из массива объектов

Возвратить общую сумму из массива объектов

Вопрос: в div с классом target надо отобразить сумму товаровКак правильно перебрать массив(должно быть 2 перебора или можно в 1 пробежать) и какой...

91
Как исправить ошибку Uncaught TypeError: Cannot read property &#39;style&#39; of null?

Как исправить ошибку Uncaught TypeError: Cannot read property 'style' of null?

Я написал код который изменяет цвет меню в зависимости от позиции на странице

134