Donnerstag, Juni 4, 2020

Array Liste mit Absicht extra in Java

Ich versuche zu überspringen meine ArrayList durch Intent. Aber ich kann nicht finden, was Sie schreiben extra? Alle get-Methoden, die ich bin immer Fehler wie „das gilt nicht für string.“

Artikel Details:

public class ItemDetails {

public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getItemDescription() {
    return itemDescription;
}
public void setItemDescription(String itemDescription) {
    this.itemDescription = itemDescription;
}
public String getPrice() {
    return price;
}
public void setPrice(String price) {
    this.price = price;
}
public int getImageNumber() {
    return imageNumber;
}
public void setImageNumber(int imageNumber) {
    this.imageNumber = imageNumber;
}

public int getVideoNumber() {
    return videoNumber;
}
public void setVideoNumber(int videoNumber) {
    this.videoNumber = videoNumber;
}

public void setChild(ArrayList<ItemDetails> item_child)
{
    this.item_child = item_child;
}
public ArrayList<ItemDetails> getChild()
{
    return this.item_child;
}
public void setParent(ArrayList<ItemDetails> item_parent)
{
    this.item_parent = item_parent;
}
public ArrayList<ItemDetails> getParent()
{
    return this.item_parent;
}



private String name ;
private String itemDescription;
private String price;
private int imageNumber;
private int videoNumber;
private ArrayList<ItemDetails> item_child;
    private ArrayList<ItemDetails> item_parent; 
}

Meiner Klasse:

static class ViewHolder {
    TextView txt_itemName;
    TextView txt_itemDescription;
    TextView txt_itemPrice;
    ImageView itemImage;
    ArrayList<ItemDetails> item_parent;
    ArrayList<ItemDetails> item_child;
}

Meine putExtra:

intObj.putExtra("exerciselist",obj_itemDetails.getChild());

GetChild Funktion :

public ArrayList<ItemDetails> getChild()
{
   return this.item_child;
}

Aber ich kann nicht finden, wie soll ich das schreiben bekommen arrayList?

ArrayList<ItemDetails> child1 = getIntent().?????????
InformationsquelleAutor starrystar | 2013-03-31

1 Kommentar

  1. 27

    Aber ich kann nicht finden, wie bin ich eigentlich zum schreiben zu bekommen arrayList

    Kurze Antwort: das können Sie nicht. Sie können nur übergeben ArrayList<String> und es dann abrufen mit

    getIntent().getStringArrayListExtra("key");


    Aber. Wenn Sie möchten, übergeben von benutzerdefinierten Objekten über die Absicht, Ihre Objekte zu implementieren:

    Können Sie einen von Ihnen wählen. Beides funktioniert gleich, haben aber unterschiedliche Implementierungen.

    Parcelable-Schnittstelle:

    Wenn Sie Parcelable-Schnittstelle, ItemDetails Klasse Parcelable implementieren. Dann können Sie ihn auch als

    intent.putParcelableArrayListExtra("key", value);

    und abrufen, wie:

    getIntent().getParcelableArrayListExtra("key");

    Ich werde Sie nicht schreiben, Sie Parcelable-Implementierung, da Bedarf es ein wenig mehr code. Hier ist schönes Beispiel.

    Serializable-interface:

    Wenn Sie Serializable-interface, ich schlage vor, Sie zu erstellen, wird die Klasse zum Beispiel ItemDetailsWrapper wird, wickeln Sie Ihre ArrayList(s)<ItemDetails>

    Beide also ItemDetailsWrapper und ItemDetails-Klasse implementieren müssen, um Serialisierbar-Schnittstelle. Jetzt sind Sie in der Lage, übergeben Sie es über Absicht so:

    getIntent().putExtra("key", <serializableClass>); //storing 
    getIntent().getSerializableExtra("key"); //retrieving

    Beispiel der Umsetzung:

    public class ItemDetailsWrapper implements Serializable {
    
        private static final long serialVersionUID = 1L;
        private ArrayList<ItemDetails> itemDetails;
    
        public ItemDetailsWrapper(ArrayList<ItemDetails> items) {
            this.itemDetails = items;
        }
    
        public ArrayList<ItemDetails> getItemDetails() {
            return itemDetails;
        }
    }
    
    public class ItemDetails implements Serializable {
    
        private static final long serialVersionUID = 1L;
    
        //getters, setters and properties
    }

    Und das passieren von Aktivitäten:

    ItemDetailsWrapper wrapper = new ItemDetailsWrapper(list);
    Intent i = new Intent(<context>, <targetActivity>);
    i.putExtra("obj", wrapper); //i.putExtra("obj", new ItemDetailsWrapper(list));
    //retrieving 
    ItemDetailsWrapper wrap = 
                        (ItemDetailsWrapper) getIntent().getSerializableExtra("obj");
    ArrayList<ItemDetails> list = wrap.getItemDetails();
    • Super Antwort! Das Beispiel wurde vor Ort auf!
    • danke buddy.
    • Perfekte put & get list der array !!!!
    • Bei der Auswahl Parcelable oder Serializable behalten Sie dies im Hinterkopf, dass Serialisierbar ist langsamer als Parcelable
    • Perfekte Erklärung 😀
    • Danke, die wrapper-Idee funktionierte bei mir auch! Ich war immer eine HashMap mit getSerializableExtra und ich war nicht in der Lage, um wieder meine original-Objekte. Die Verwendung von Generika könnte man auch einen wrapper, der arbeitet für viele verschiedene „ItemDetails“
    • Große,Schöne Lösung

Kostenlose Online-Tests