ListView onItemClick in Kombination mit onFling

  • Antworten:3
M.K
  • Forum-Beiträge: 8

22.12.2011, 20:46:25 via Website

Hallo Leute,

ich brauche eure Hilfe. Ich habe eine Listview die ich mit verschiedenen elementen Fülle. Ich habe der ListView einen onItemClick Listener hinzugefügt welche (aktuell) einen Toast Objekt auswirft. Da der itemClick die View, ID und weitere Parameter übergibt weis ich immer welches Item Element geklickt wurde.

Als Beispiel: Klicke ich das erste Element an kriege ich eine "0" als ID usw.

Nun zu meiner Frage. Ich will das OnClick event durch ein onFling event ersetzen. Dieses soll mir ermöglichen mit einer wisch bewegung die Liste zu modifizieren. Leider hat die onFling Methode keine ID als Parameter. Ich weis also nicht welches Listenelement "geswiped" worden ist.

Hat jemand eine Lösung wie ich herausfinden kann welches Listenelement(ID) "geswiped" wurde?

Vielen Dank im Voraus.

Antworten
Felix
  • Forum-Beiträge: 259

22.12.2011, 21:31:06 via Website

M.K
Ich will das OnClick event durch ein onFling event ersetzen. Dieses soll mir ermöglichen mit einer wisch bewegung die Liste zu modifizieren.

Ich halte das für nicht glücklich. Zum einen ersetzt du ein einfaches Antippen durch eine komplexere Wischbewegung. Auf der anderen Seite musst du diesen Wisch erstmal auswerten, wofür du einen GestureDetector verwenden musst.

Leider hat die onFling Methode keine ID als Parameter. Ich weis also nicht welches Listenelement "geswiped" worden ist.

Der GestureDetector weiß natürlich nichts von einer ListView und dass diese ein paar Elemente hat, der liefert dir nur die Start- und die Ende-Position des Wischs.

Hat jemand eine Lösung wie ich herausfinden kann welches Listenelement(ID) "geswiped" wurde?

Wenn du den GestureDetector auf auf das onTouch der ListView setzt, musst du von da aus das darunterliegende Item ermitteln. Ich könnte mir vorstellen, dass du ohne diese Rechnung auskommen kannst, wenn du auf die einzelnen onTouchs der Items reagierst. Dann hast du zumindest schon mal das richtige Item als View. Wenn du zu dem Item noch irgendwelche Daten benötigst, könntest du die über setTag/getTag der View durchreichen. Jetzt muss die ListView nur noch den Touch unkonsumiert durchreichen ...


Felix.

Antworten
M.K
  • Forum-Beiträge: 8

22.12.2011, 21:37:43 via Website

Vielen Dank für die Antwort.

Ich glaube da gibt es ein Missverständniss. Das onclick event was ich derzeit habe soll nicht mehr existieren. Das OnClick liefert mir die ID des listenelements. Ich bräuchte beim Onfling auch so etwas ähnliches.

Ich habe in der OnFling Methode folgendes versucht:

1int point = lv1.pointToPosition((int)e1.getX(),(int)e2.getX());

Jedoch liefert mir das nicht das richtige Element.

Antworten
Felix
  • Forum-Beiträge: 259

22.12.2011, 23:42:11 via Website

Tach!

Ich glaube da gibt es ein Missverständniss.

Gut möglich. Die Frage ist nur, wer wen missversteht.

Das onclick event was ich derzeit habe soll nicht mehr existieren. Das OnClick liefert mir die ID des listenelements.

Dass du das onItemClick nicht mehr haben willst, hab ich verstanden. Ich finde es aber nicht gut, das zu ersetzen, weil es für den Anwender ungewohnt und hinter den Kulissen aufwendig ist.

Ich bräuchte beim Onfling auch so etwas ähnliches.

Wenn ich nach OnFling suche, komme ich immer nur auf den GestureDetecture und die Gallery. Der GestureDetector kann meines Wissens nach über das onTouch jedes beliebigen View-Elements angesprochen werden. Wie kommst du denn zum „deinem“ onFling?

Ich habe in der OnFling Methode folgendes versucht:
1int point = lv1.pointToPosition((int)e1.getX(),(int)e2.getX());
Jedoch liefert mir das nicht das richtige Element.

Dazu kann ich nichts sagen. Man müsste schon das konkrete falsche Ergebnis und die Gegebenheiten in der ListView nebst ihrer Elemente kennen, um schlussfolgern zu können, was da zum „nicht richtig“ führt und gegebenenfalls, wie man es besser machen kann. Andererseits … was ist mit meinem Tipp, wie man es eventuell ohne eine solche händische Berechnung hinbekommt? Ist der zielführend und wenn nein, warum nicht?


Felix.

Antworten