353 Stimmen

Wie kann ich meine benutzerdefinierten Objekte paketfähig machen?

Ich versuche, meine Objekte parzellierbar zu machen. Ich habe jedoch benutzerdefinierte Objekte und diese Objekte haben ArrayList Attribute von anderen benutzerdefinierten Objekten, die ich erstellt habe.

Wie lässt sich dies am besten bewerkstelligen?

194voto

francisco_ssb Punkte 2877

Hier finden Sie eine Website, auf der Sie eine Parcelable Class aus Ihrer erstellten Klasse erstellen können:

http://www.parcelabler.com/

118voto

naXa Punkte 30160

IntelliJ IDEA und Android Studio verfügen über Plugins für diese Funktion:

Diese Plugins erzeugen Android Paketfähig Boilerplate-Code auf der Grundlage von Feldern in der Klasse.

Plugin demo

58voto

kenju Punkte 5476

1. Importieren Android Parcelable code generator

enter image description here

2. Erstellen Sie eine Klasse

public class Sample {
    int id;
    String name;
}

3. Generieren > Paketfähig aus Menü

enter image description here enter image description here

Erledigt.

21voto

naXa Punkte 30160

Wie? Mit Kommentaren.

Sie kommentieren einfach ein POJO mit einer speziellen Annotation und die Bibliothek erledigt den Rest.

Warnung!

Ich bin nicht sicher, ob Hrisey, Lombok und andere Codegenerierungsbibliotheken mit dem neuen Build-System von Android kompatibel sind. Sie können oder kann nicht schön mit Hot-Swapping-Code (d.h. jRebel, Instant Run) spielen.

Vorteile:

  • Code-Generierungsbibliotheken ersparen Ihnen die Erstellung von Standard-Quellcode.
  • Anmerkungen machen Ihre Klasse schön.

Nachteile:

  • Es funktioniert gut für einfache Klassen. Eine komplexe Klasse parzellierbar zu machen, kann schwierig sein.
  • Lombok und AspectJ spielen nicht gut zusammen. [Details]
  • Siehe meine Warnungen.

Hrisey

Warnung!

Hrisey hat ein bekanntes Problem mit Java 8 und kann daher nicht verwendet werden für And Siehe #Nr. 1 Fehler bei der Suche nach Symbolen (JDK 8) .

Hrisey basiert auf Lombok . Parcelable-Klasse mit Hrisey :

@hrisey.Parcelable
public final class POJOClass implements android.os.Parcelable {
    /* Fields, accessors, default constructor */
}

Jetzt brauchen Sie keine Methoden der Schnittstelle Parcelable mehr zu implementieren. Hrisey wird den gesamten erforderlichen Code während der Vorverarbeitungsphase generieren.

Hrisey in Gradle-Abhängigkeiten:

provided "pl.mg6.hrisey:hrisey:${hrisey.version}"

Siehe hier für unterstützte Typen. Die Website ArrayList ist unter ihnen.

Installieren Sie ein Plugin - Hrisey oder Lombok* - für Ihre IDE und nutzen Sie seine erstaunlichen Funktionen!

enter image description here
* Aktivieren Sie die Plugins Hrisey und Lombok nicht gleichzeitig, sonst erhalten Sie einen Fehler beim Start der IDE.


Paketbote

Parcelable-Klasse mit Paketbote :

@java.org.parceler.Parcel
public class POJOClass {
    /* Fields, accessors, default constructor */
}

Um den generierten Code zu verwenden, können Sie die generierte Klasse direkt referenzieren, oder über die Parcels Hilfsklasse mit

public static <T> Parcelable wrap(T input);

Zum Dereferenzieren der @Parcel rufen Sie einfach die folgende Methode von Parcels Klasse

public static <T> T unwrap(Parcelable input);

Parceler in Gradle-Abhängigkeiten:

compile "org.parceler:parceler-api:${parceler.version}"
provided "org.parceler:parceler:${parceler.version}"

Blick in README für unterstützte Attributtypen .


AutoParcel

AutoParcel ist ein AutoValue Erweiterung, die die Generierung paketfähiger Werte ermöglicht.

Einfach hinzufügen implements Parcelable zu Ihrem @AutoValue kommentierte Modelle:

@AutoValue
abstract class POJOClass implements Parcelable {
    /* Note that the class is abstract */
    /* Abstract fields, abstract accessors */

    static POJOClass create(/*abstract fields*/) {
        return new AutoValue_POJOClass(/*abstract fields*/);
    }
}

AutoParcel in der Gradle-Build-Datei:

apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'

repositories {
    /*...*/
    maven {url "https://clojars.org/repo/"}
}

dependencies {
    apt "frankiesardo:auto-parcel:${autoparcel.version}"
}

PaperParcel

PaperParcel ist ein Annotationsprozessor, der automatisch typsicheren Parcelable Boilerplate Code für Kotlin und Java generiert. PaperParcel unterstützt Kotlin-Datenklassen, Googles AutoValue über eine AutoValue-Erweiterung oder einfach normale Java-Bean-Objekte.

Verwendungsbeispiel aus 文書 .
Beschriften Sie Ihre Datenklasse mit @PaperParcel umsetzen. PaperParcelable und fügen Sie eine statische JVM-Instanz von PaperParcelable.Creator z.B.:

@PaperParcel
public final class Example extends PaperParcelable {
    public static final PaperParcelable.Creator<Example> CREATOR = new PaperParcelable.Creator<>(Example.class);

    private final int test;

    public Example(int test) {
        this.test = test;
    }

    public int getTest() {
        return test;
    }
}

Für Kotlin-Benutzer, siehe Kotlin-Verwendung Für AutoValue-Benutzer, siehe AutoValue Verwendung .


ParcelableGenerator

ParcelableGenerator (README ist auf Chinesisch geschrieben und ich verstehe es nicht. Beiträge zu dieser Antwort von englisch-chinesisch sprechenden Entwicklern sind willkommen)

Verwendungsbeispiel aus README .

import com.baoyz.pg.Parcelable;

@Parcelable
public class User {

    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

}

のことです。 Android-apt Plugin hilft bei der Arbeit mit Annotationsprozessoren in Kombination mit Android Studio.

8voto

Vishal Nagvadiya Punkte 1058

Parcelable-Klasse ohne Plugin in Android Studio erstellen

implementiert Parcelable in Ihrer Klasse und setzen Sie dann den Cursor auf "implements Parcelable" und drücken Sie Alt+Enter und wählen Sie Add Parcelable implementation (siehe Bild). Das war's.

enter image description here

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X