1. Nimm jetzt an unserem Geotel Note - Gewinnspiel teil - Informationen zum Note findest Du hier!
  1. emanuell, 04.10.2010 #1
    emanuell

    emanuell Threadstarter Neuer Benutzer

    Hallo zusammen

    Wie übergebe ich zwischen zwei Views ein LinkedList. Mit put Extra kann ich ja z.B. Strings und integers übergeben kann ich auch eine Variable vom Typ linked List übergeben ?? Getter und Setter funktionieren nicht, die werte werden alle wieder auf null gesezt wenn ich startActivity(intent) ausführe.

    Wie kann ich das Problem lösen ?
    :mellow:

    Gruss
     
  2. swordi, 04.10.2010 #2
    swordi

    swordi Gewerbliches Mitglied

    also was ich sicher weiß, ist dass man arraylists übergeben kann, die parcelable sind.

    linkedlist dürfte nicht so viel anders sein

    parcelable ist halt das stichwort
     
  3. the_alien, 04.10.2010 #3
    the_alien

    the_alien Android-Lexikon

    Vorallem die Objekte die drin sind müssen Parceable sein!
     
  4. emanuell, 04.10.2010 #4
    emanuell

    emanuell Threadstarter Neuer Benutzer

    Hallo

    Ich habe ein Beispiel gefunden. Wie passe ich das für ein LinkedList an.

    Mein Code ParcelTest.java
    Code:
    package second.Project;
    import java.util.HashMap;
    import java.util.LinkedList;
    import android.os.Parcel;
    import android.os.Parcelable;
    public class ParcelTest implements Parcelable
    {
     private LinkedList<Poi> poi;
     public ParcelTest(LinkedList<Poi> tmppoi) {
      this.poi = tmppoi;
     }
     public ParcelTest(Parcel in) 
     {
      String[] data = new String[3];
      in.readStringArray(data);
      this.id = data[0];
      this.name = data[1];
      this.grade = data[2];
     }
     @Override
     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 ParcelTest createFromParcel(Parcel in) 
      {
       return new ParcelTest(in);
      }
      public ParcelTest[] newArray(int size) 
      {
       return new ParcelTest[size];
      }
     };
    }
    
    
    Activity1.java
    Code:
    intent.putExtra("myLinkedList", linkList);
    
    Activity2.java
    Code:
    Bundle data = getIntent().getExtras();
    ParcelTest test= data.getParcelable("myLinkedList");
    
    please help :unsure:
     
  5. the_alien, 04.10.2010 #5
    the_alien

    the_alien Android-Lexikon

    Die LinkedList implementiert Serializable. Von daher geht sie sowieso. Problem dürften nur deine Objekte sein. Die müssen Serializable oder Parceable sein, sonst gehts nicht.
     
  6. emanuell, 04.10.2010 #6
    emanuell

    emanuell Threadstarter Neuer Benutzer

    versteh dich nicht. Was meinst du genau damit. So einfach wie ein String kann ich die LinkedList nicht übergeben.
     
  7. the_alien, 04.10.2010 #7
    the_alien

    the_alien Android-Lexikon

    Also entweder kann man die LinkedList als Serializable Extra hinzufügen oder man wandelt die LinkedList in eine ArrayList um und die kann man über putParcelableArrayListExtra() an das Intent übergeben.
     
  8. swordi, 04.10.2010 #8
    swordi

    swordi Gewerbliches Mitglied

    guck dir an was serializable oder parcelable sind, dann weißt du auch was hier gemeint ist
     
  9. emanuell, 05.10.2010 #9
    emanuell

    emanuell Threadstarter Neuer Benutzer

    Ich hab mir das schon angeschaut. Wenn ich eine ArrayList verwende muss ich die Daten über eine Klass die parcelable implementiert. Was ist der Sinn dahinter. Ich übergebe eine ArrayList und erhalte eine ArrayList. Wieso brauchts diesen Weg überhaupt. Theoretisch überflüssig oder nicht ?

    ArrayList<Poi> arrList = new ArrayList<Poi>;
    ......
    ......

    mit
    Code:
    intent.putParcelableArrayListExtra("meineListe", arrList);
    und mit folgendem Code auslesen:
    Code:
    getParcelableArrayList
     
  10. the_alien, 05.10.2010 #10
    the_alien

    the_alien Android-Lexikon

    Deine Objekte müssen komplett serialisierbar sein, weil ein Intent auch über Prozessgrenzen hinweg verschickt werden kann. Darum _müssen_ deine Objekte Parcelable sein. Sonst funktioniert es schlicht und ergreifend nicht.

    Du kommst schlicht nicht drum herum Parcelable zu implementieren.
     
  11. swordi, 05.10.2010 #11
    swordi

    swordi Gewerbliches Mitglied

    ob du willst oder nicht - ohne gehts nicht
     
  12. emanuell, 05.10.2010 #12
    emanuell

    emanuell Threadstarter Neuer Benutzer

    Ich habe nicht gesagt dass ich das nicht will:drool:. Nur bin ich mir mit iPhone App Entwicklung gewöhnt und dort geht das ganze ziemlich komfortabler. Aber egal.
    Wenn ich das ganze richtig verstanden habe: Anhand der Verwendung von Parcelable-Interface wird eine sprachneutrale serialisierung für die übertragung von parametern gewährleistet.
     
    Zuletzt bearbeitet: 05.10.2010
  13. emanuell, 05.10.2010 #13
    emanuell

    emanuell Threadstarter Neuer Benutzer

    So hab mal das ganze probiert umzusetzen. Funktioniert auch. Ich habe eine Klasse ListOfPersonen die das Interface Parcelable implementiert.
    Ich kann jetzt auch eine Liste bzw. Array an ein Activity weitergeben.

    Wie kann ich diese Liste in ein ListView anzeigen lassen

    Code:
    private PersonenList listOfPersonen;
    Bundle b = getIntent().getExtras();
    listOfPersonen = b.getParcelable("meineListe");
    [SIZE=2].....[/SIZE]
    lv1=(ListView)findViewById(R.id.list);
    lv1.setAdapter(new ArrayAdapter<Person>(this,android.R.layout.simple_list_item_1 , listOfPersonen));
    
    kling einfach sollte es auch sein ich weiss nur nicht wo ansetzen :)
    Es zeigt einfach ch.test@78679 oder sowas an. das ist ein objekt :)

    ich weiss das bei setAdapter mein Fehler ist.

    meine Klasse PersonenList:
    Code:
    package ch.bauen;
    import java.util.ArrayList;
    import android.os.Parcel;
    import android.os.Parcelable;
     
    public class PersonenList extends ArrayList<Person> implements Parcelable
    {
            public PersonenList()
            {
            }
     
            public PersonenList(Parcel in)
            {
                    readFromParcel(in);
            }
     
            @SuppressWarnings("unchecked")
     
            public static final Parcelable.Creator CREATOR = new Parcelable.Creator() 
            {
                    public PersonenList createFromParcel(Parcel in) 
                    {
                            return new PersonenList(in);
                    }
     
                    public Object[] newArray(int arg0) 
                    {
                            return null;
                    }
            };
     
     
     
            private void readFromParcel(Parcel in) 
            {
                    this.clear();
                    int size = in.readInt();
     
                    for (int i = 0; i < size; i++) 
                    {
                            Person c = new Person();
                            c.setName(in.readString()); 
                            this.add(c);
                    }
            }
     
     
     
            public int describeContents() 
            {
                    return 0;
            }
     
     
     
            public void writeToParcel(Parcel dest, int flags) 
            {
                    int size = this.size();
                    dest.writeInt(size);
     
                    for (int i = 0; i < size; i++) 
                    {
                            Person c = this.get(i);
                            dest.writeString(c.getName());
                    }
     
            }
    }
     
    
     
    Zuletzt bearbeitet: 05.10.2010
  14. the_alien, 05.10.2010 #14
    the_alien

    the_alien Android-Lexikon

    Du schreibst einen PersonArrayAdapter der ArrayAdapter<Person> überschreibt. Da bekommst du den View übergeben der in der Liste für einen Eintrag angezeigt wird und kannst ihn mit Leben füllen. (Kurzfassung)

    Und es ist klar, dass es beim iPhone total einfach geht, da gibt es keine Kommunikation über Prozessgrenzen hinweg ;)
     
  15. emanuell, 06.10.2010 #15
    emanuell

    emanuell Threadstarter Neuer Benutzer

    Ich versteh deine Kurfassung nicht ganz. Was habe ich den grundlegend falsch gemacht beim füllen des Views.
     
  16. emanuell, 08.10.2010 #16
    emanuell

    emanuell Threadstarter Neuer Benutzer

    can someone help me please :tongue:
     
Die Seite wird geladen...
Ähnliche Themen - intent putxtra LinkedList Forum Datum
Intent mit Daten (putExtra) zu anderer Activity Android App Entwicklung 14.02.2017

Besucher kamen mit folgenden Begriffen auf unsere Seite:

  1. LinkedList activities android übergeben

    ,
  2. arraylist intent übergebe

    ,
  3. android linkedlist