Я пытаюсь сделать свои объекты разборчивыми. Однако у меня есть пользовательские объекты, и у этих объектов есть ArrayList
атрибуты других пользовательских объектов, которые я создал.
Каков был бы лучший способ сделать это?
источник
Я пытаюсь сделать свои объекты разборчивыми. Однако у меня есть пользовательские объекты, и у этих объектов есть ArrayList
атрибуты других пользовательских объектов, которые я создал.
Каков был бы лучший способ сделать это?
Вы можете найти некоторые примеры этого здесь , здесь (код взят здесь) и здесь .
Вы можете создать класс POJO для этого, но вам нужно добавить дополнительный код, чтобы сделать это Parcelable
. Посмотрите на реализацию.
public class Student implements Parcelable{
private String id;
private String name;
private String grade;
// Constructor
public Student(String id, String name, String grade){
this.id = id;
this.name = name;
this.grade = grade;
}
// Getter and setter methods
.........
.........
// Parcelling part
public Student(Parcel in){
String[] data = new String[3];
in.readStringArray(data);
// the order needs to be the same as in writeToParcel() method
this.id = data[0];
this.name = data[1];
this.grade = data[2];
}
@Оverride
public int describeContents(){
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeStringArray(new String[] {this.id,
this.name,
this.grade});
}
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
public Student createFromParcel(Parcel in) {
return new Student(in);
}
public Student[] newArray(int size) {
return new Student[size];
}
};
}
После того как вы создали этот класс, вы можете легко передавать объекты этого класса через него Intent
и восстанавливать этот объект в целевом действии.
intent.putExtra("student", new Student("1","Mike","6"));
Здесь студент - это ключ, который вам потребуется для разборки данных из пакета.
Bundle data = getIntent().getExtras();
Student student = (Student) data.getParcelable("student");
Этот пример показывает только String
типы. Но вы можете отправлять любые данные, какие захотите. Попробуйте это.
РЕДАКТИРОВАТЬ: Другой пример , предложенный Rukmal Dias .
writeToParcel
метода?Вот сайт для создания Parcelable Class из вашего созданного класса:
http://www.parcelabler.com/
источник
IntelliJ IDEA и Android Studio имеют плагины для этого:
Эти плагины генерируют стандартный шаблон Android Parcelable на основе полей в классе.
источник
1. Импорт
Android Parcelable code generator
2. Создать класс
3. Создать> Parcelable из меню
Готово.
источник
File > Settings... > Plugins
нажмитеBrowse repositories...
кнопку.Как? С аннотациями.
Вы просто аннотируете POJO специальной аннотацией, а библиотека делает все остальное.
Плюсы:
Минусы:
Хрисей
Хризей основан на Ломбоке . Класс Parcelable с использованием Hrisey :
Теперь вам не нужно реализовывать какие-либо методы интерфейса Parcelable. Hrisey сгенерирует весь необходимый код на этапе предварительной обработки.
Hrisey в Gradle зависимости:
Смотрите здесь для поддерживаемых типов. Это
ArrayList
среди них.Установите плагин - Hrisey xor Lombok * - для своей IDE и начните использовать его удивительные возможности!
* Не включайте плагины Hrisey и Lombok вместе, иначе вы получите ошибку при запуске IDE.
Parceler
Класс Parcelable с использованием Parceler :
Чтобы использовать сгенерированный код, вы можете ссылаться на сгенерированный класс напрямую или через
Parcels
служебный класс, используяЧтобы разыменовать
@Parcel
, просто вызовите следующий методParcels
классаParceler в Gradle зависимости:
Посмотрите в README поддерживаемые типы атрибутов .
AutoParcel
AutoParcel - это расширение AutoValue, которое позволяет создавать значения Parcelable.
Просто добавьте
implements Parcelable
в свои@AutoValue
аннотированные модели:AutoParcel в файле сборки Gradle:
PaperParcel
PaperParcel - это процессор аннотаций, который автоматически генерирует стандартный код Parcelable Parcelable для Kotlin и Java. PaperParcel поддерживает классы данных Kotlin, Google AutoValue через расширение AutoValue или только обычные объекты Java bean.
Пример использования из документов .
Аннотируйте свой класс данных с помощью
@PaperParcel
, реализуйтеPaperParcelable
и добавьте статический экземпляр JVM,PaperParcelable.Creator
например:Для пользователей Kotlin см. Использование Kotlin ; Для пользователей AutoValue см. Использование AutoValue .
ParcelableGenerator
ParcelableGenerator (README написан на китайском языке, и я не понимаю его. Вклад в этот ответ от англо-китайских разработчиков, приветствующих)
Пример использования из README .
В Android-склонный плагин помогает в работе с процессорами аннотаций в сочетании с Android Studio.
источник
Я нашел самый простой способ создать класс Parcelable
источник
Это очень просто, вы можете использовать плагин на Android Studio, чтобы сделать объекты Parcelables.
источник
Теперь вы можете использовать библиотеку Parceler для преобразования любого вашего пользовательского класса в parcelable. Просто аннотируйте свой класс POJO с помощью @Parcel . например
Вы можете создать объект класса Example и обернуть его через Parcels и отправить как связку через намерение. например
Теперь, чтобы получить объект Custom Class, просто используйте
источник
Android Parcable имеет несколько уникальных вещей. Те приведены ниже:
Пример: чтобы сделать класс Parceble, необходимо реализовать Parceble. У Percable есть 2 метода:
Предположим, у вас есть класс Person, и у него есть 3 поля: firstName, lastName и age. После реализации интерфейса Parceble. этот интерфейс дан ниже:
Здесь
writeToParcel
методом мы пишем / добавляем данные о посылке в порядке. После этого мы должны добавить ниже код для чтения данных из посылки:Здесь класс Person берет посылку и получает данные в том же порядке во время записи.
Теперь во время намерения
getExtra
иputExtra
код дан ниже:Положите в Extra :
Получите Extra:
Полный класс лица приведен ниже :
источник
Создать класс Parcelable без плагина в Android Studio
реализует Parcelable в вашем классе, а затем поместите курсор на «Implements Parcelable» и нажмите
Alt+Enter
и выберитеAdd Parcelable implementation
(см. изображение). Это оно.источник
Класть:
bundle.putSerializable("key",(Serializable) object);
Получить:
List<Object> obj = (List<Object>)((Serializable)bundle.getSerializable("key"));
источник
ClassCastException
что объект не будет реализованSerializable
.