Zeile einer ListView mit eigenem Format mit Hilfe der PositionsID auslesen

  • Antworten:11
Steven S.
  • Forum-Beiträge: 19

15.03.2012, 17:20:29 via Website

Hallo,

folgendes Problem:
Ich habe eine ListView erstellt, wobei jede einzelne Zeile wiederum aus mehreren Views besteht. Diese habe ich mit Hilfe eines SimpleAdapters befülle. Dies funktioniert auch ohne Probleme. Jetzt habe ich ein Kontextmenu, über welches ich die Zeile wieder auslesen möchte. Folgendes habe ich halbwegs erfolgreich getestet:

1activityList.getItemAtPosition(id)


Damit habe ich aber alle Views der Zeile in geschweiften Klammern zurückgegeben bekommen: {Key=value, Key=Value, ...}
Was genau kann ich damit anfangen, ausser es selbst auseinander zu nehmen? Ich könnte die "=" durch ":" ersetzen und dann in ein JsonObjekt einlesen!?

Kann ich denn nicht geziehlt auf die einzelnen views zugreifen?

Danke und Gruß,
Steven

Antworten
reiti.net
  • Forum-Beiträge: 339

15.03.2012, 17:58:47 via Website

Ich kenne jetzt den Aufbau Deiner App nicht, aber warum greifst du nicht auf das hinterliegende Datenobjekt zu (also die Liste, die die Listview anzeigt) - geht das nicht oder sind dort nicht die Daten drin, die du brauchst?

Antworten
Steven S.
  • Forum-Beiträge: 19

16.03.2012, 10:25:07 via Website

Hi,

Also wenn ich deinen Ansatz richtig interpretiere, ist es ja genau das, was ich mache. Ich greife auf die Liste meiner ListView "activityList" zu. Allerdings nur auf den Teil einer Zeile. In diesem gibt es aber eine Anordnung mehrer Views und daher bekomme ich alle Views in einem String, eingeschlossen von geschweiften Klammern, mit Komma getrennt zurück. Ich will aber ja auf eine einzelne View in der Zeile der Liste zugreifen.

Eine Zeile meiner Liste sieht folgendermaßen aus:

1<LinearLayout android:id="@+id/linearLayout1"
2 android:layout_width="fill_parent"
3 android:layout_height="wrap_content"
4 android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android">
5
6 <LinearLayout
7 android:id="@+id/linearLayout2"... >
8
9 <TextView
10 android:id="@+id/TextView1"... />
11
12
13 <TextView
14 android:id="@+id/TextView2".../>
15
16 <TextView
17 android:id="@+id/TextView3"... />
18
19 </LinearLayout>
20
21 <LinearLayout
22 android:id="@+id/linearLayout3"... >
23
24 <TextView
25 android:id="@+id/TextView4"... />
26
27 <TextView
28 android:id="@+id/TextView5" ... />
29
30 </LinearLayout>
31
32 </LinearLayout>

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

16.03.2012, 10:29:10 via Website

Du hast doch aber die Daten, die in dem Listview angezeigt werden auch noch irgendwo als Liste von Datenobjekten vorliegen, die du dem Adapter übergibst.
Wenn du weisst welcher Index ausgewählt wurde, greife doch einfach direkt auf diese Liste von Daten zurück, statt wieder umständlich aus dem View die Daten rauszufrickeln.

— geändert am 16.03.2012, 10:29:40

Antworten
Steven S.
  • Forum-Beiträge: 19

16.03.2012, 11:01:45 via Website

Kann ich mir aber hundert Prozent sicher sein, dass die ID der ListView mit der des Datenobjektes übereinstimmt? Ich denke das ist nicht unbedingt gesagt. Es wäre fatal sich hierauf zu verlassen, vor allem weil es um das löschen von Datensätzen geht!

Antworten
Steven S.
  • Forum-Beiträge: 19

16.03.2012, 12:50:15 via Website

Hmmmm... ok, dann werde ich meine ArrayList mit dem Index auslesen. Dazu muss ich sie zwar global deklarieren, aber naja...
Übrigens, das habe ich etwas doof ausgedrückt, meine id ist der Index der Listview. Damit sollte das ja dann funktionieren. Werde es mal ausprobieren. Danke.

Antworten
Steven S.
  • Forum-Beiträge: 19

16.03.2012, 13:22:54 via Website

Super... So funktioniert es! habe es per Logausgabe mal überprüft. Was passiert denn aber wenn ich die Listview irgendwie sortieren würde oder ähnliches?

Antworten
reiti.net
  • Forum-Beiträge: 339

16.03.2012, 13:33:41 via Website

dann musst du sowieso das Datenarray sortieren. Die Listview hat intern keine Liste - dafür ist der Adapter da - er adaptiert eine vorhande Liste von Objekten damit sie von der ListView angezeigt werden kann. Die ListView hat keine eigene Liste mit Daten.

Antworten
Steven S.
  • Forum-Beiträge: 19

16.03.2012, 14:50:11 via Website

Ahh ok... Wenn ich das richig verstehe gibt es dann auch für die Listview keine Sortierung nach bestimmten spalten oder ähnliches, wenn ich das nicht selbst alles drum herum programmiere!?
Finde ich nicht so toll :)

Antworten
reiti.net
  • Forum-Beiträge: 339

16.03.2012, 15:23:50 via Website

richtig, in anderen Programmiersprachen läuft das im Grunde ähnlich, auch wenn dort oft die ListView eine eigene Liste führt und die UI Elemente fürs Sortieren anbietet, musst du dennoch den Sortieralgo selbst implementieren (oder einen vorgefertigten nehmen)

Aber in Deinem Fall musst du dir erstmal keine Sorgen machen, es wird nichts ohne Dein Wissen sortiert oder in der Reihenfolge modifiziert.

Antworten