intent.putxtra -> LinkedList

E

emanuell

Neues Mitglied
0
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
 
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
 
Vorallem die Objekte die drin sind müssen Parceable sein!
 
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:
 
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.
 
versteh dich nicht. Was meinst du genau damit. So einfach wie ein String kann ich die LinkedList nicht übergeben.
 
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.
 
guck dir an was serializable oder parcelable sind, dann weißt du auch was hier gemeint ist
 
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
 
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.
 
emanuell schrieb:
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

ob du willst oder nicht - ohne gehts nicht
 
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:
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:
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 ;)
 
Ich versteh deine Kurfassung nicht ganz. Was habe ich den grundlegend falsch gemacht beim füllen des Views.
 
can someone help me please :tongue:
 
Zurück
Oben Unten