# Android ListView Frage



## undertaker (26. Jun 2012)

Hallo zusammen,

ich sitze grade vor einem kleinen Problem mit den Android-ListView's. Und zwar habe ich einen einfachen ListView mit Daten gefüllt (einfache Strings). Die Frage ist jetzt, ob man zu dem jeweiligen Listenelement noch eine ID hinterlegen kann bzw. ein eigenes Objekt mit dazugehörigen Daten?


----------



## MiDniGG (26. Jun 2012)

Ich nehme an Du willst auf einen Eintrag klicken und dann zusätzliche Informationen anzeigen?!

Das sollte mit ner Liste von Objekten (eigene Klasse) und ner for-Schleife nicht zu schwer sein.

Dann kannst du über getSelectedItem (oder Index oder so ähnlich, möchte jetzt nicht suchen) den angeklickten Eintrag auslesen und dann eben das Objekt anhand des Index aus der Liste auslesen.

Ich hoffe das ist einigermaßen verständlich... ^^


----------



## undertaker (26. Jun 2012)

Nein, also ich erkläre besser mal genau was ich machen will: 

Ich habe eine Liste mit Straßennamen, die ich im ListView anzeige. Zusätzlich dazu habe ich zu jeder Straße auch Koordinaten. Wenn man jetzt auf den Eintrag klickt, soll sich die google-maps-Karte zu diesen Koordinaten bewegen (wie das funktioniert weiß ich). Nur weiß ich jetzt irgendiwe nicht, wie ich die Koordinaten da hinterlegt und bekomme? Mitanzeigen möchte ich sie nämlich nicht.

Weiß jetzt aber auch nicht genau ob du genau das in deinem obigen Beitrag beschrieben hast^^


----------



## Plopo (26. Jun 2012)

Du kannst mit ".setId(int id)" eine Id setzen.

Solltest du einen "clickListener" benötigen versuch folgendes.


```
ListView lv = (ListView) findViewById (R.id.listView1); //Anpassen mit deinem ListView!

    lv.setOnItemClickListener (new OnItemClickListener ()
    {
      public void onItemClick (AdapterView<?> arg0, View v, int pos, long id)
      {
          //Hier kommt der Code rein, um die Klicks zu verarbeiten
      }
    });
```

[EDIT]
Deine Straßennamen sollten in einer ArrayList (Oder ähnlichem stehen).
Dann kannst du mittels "pos" den Inhalt auslesen (Dein Straßenobjekt).
Also ca. so:

```
//Pseudocode!
ArrayList al = new ArrayList();
al.get(pos);
```
[/EDIT]


----------



## schlingel (26. Jun 2012)

Ja, das kannst du. 

der OnItemClick-Listener liefert dir dann den Index des angeklickten Elements zurück und mit getItem(int index) des Adapters kannst du auf das Objekt zugreifen.


----------



## undertaker (26. Jun 2012)

Okay, also den OnItemClick-Listener habe ich schon implementiert und das funktioniert auch super, aber mit getItem() bekomme ich doch nur den String zurück, der in der Liste angezeigt wird, oder nicht?

Danke schonmal für eure Antworten bis jetzt 

Edit1:
[EDIT]
Ja, mein Straßennamen stehen in einer ArrayList, aber wie bekomme ich die dazugehörigen Koordinaten mit?

Mal angenommen ich habe ein Klasse Straße:

```
pubic class Strasse {
String name;
int longitude;
int latitude;
```

Ist es dann vielleicht möglich das gesamte Objekt in den ListView zu legen, z.B. mit einer ArrayList<Strasse> und nur den Straßenname im ListView anzuzeigen? Denn dann würde ich ja mit der getItem() das ganze Objekt Straße bekommen oder?
[/EDIT]

Edit2:
[EDIT]
Okay habe es geschafft wies in meinem ersten edit steht. Einfach das Objekt in die ArraList schmeisen. Mithilfe der toString-Methode wird dann der richtige Text im ListView angezeigt.
Also man braucht:


```
public class Street 
{
	String name;
	int longitude;
	int latitude;
        
        //.....

	@Override
	public String toString()
	{
		return name;
	}
}
```

Und in der Activity einfach:

```
@Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ListView lv = (ListView) findViewById(R.id.listView1);
        
        List<Street> list = new ArrayList<Street>();
        
        for (int i = 0; i < 20; i++)
        	list.add(new Street("street" + i));
        
        ArrayAdapter<Street> adapter = new ArrayAdapter<Street>(this, android.R.layout.simple_list_item_1, list);

        
        lv.setAdapter(adapter);
    }
```

Danke nochmals 
[/EDIT]


----------



## schlingel (26. Jun 2012)

Kreativer Umgang mit dem Problem. Gar nicht blöd gelöst.

Falls du einmal komplexere Daten darstellen will, vergiss nicht, dass du die Adapter auch selbst programmieren kannst in dem du von BaseAdapter ableitest. Dann musst du in getView noch den Code schreiben der eine Zelle zurückliefert die beliebig komplex sein kann.


----------

