So erhalten Sie den Standort (auf dem Bildschirm) der Zeile in der Listenansicht

7

Ich habe einen Gestenerkennungscode implementiert, so dass ich erkennen kann, wann eine Zeile in meiner Listenansicht (die sich in einem FrameLayout befindet) kopiert wurde.

%Vor%

Ich möchte eine Ansicht über dem oberen Rand der überstrichenen Zeile mit einer Reihe von kontextsensitiven Optionen für diese Zeile anzeigen.

Meine Probleme sind folgende Methoden:

%Vor%

gibt die korrekten Werte erst zurück, bevor die Ansicht gescrollt wurde. Ich könnte wahrscheinlich etwas berechnen, um Offsets mit Scroll-Positionen usw. zu berechnen, aber ich habe auch bemerkt, dass ich nur Werte bekomme, wenn ich eine Zeile wische, die auf dem Bildschirm sichtbar ist. Wenn ich in der Liste nach unten scrolle und dann eine Zeile wische (die ursprünglich nicht außerhalb des Bildschirms war), geben diese Methoden Nullwerte zurück.

Die folgenden Methoden scheinen unter dem gleichen Problem zu leiden ...

%Vor%

Letztendlich suche ich nach dem Abstand zwischen dem oberen Rand des sichtbaren listView und der Zeile, die kopiert wurde. Ich werde dann diese Entfernung verwenden, um dem übergeordneten FrameLayout eine Ansicht mit dem entsprechenden Höhenabstand hinzuzufügen (so dass es die überstrichene Zeile abdeckt).

Jede Hilfe wäre sehr willkommen!

    
Damian 26.01.2010, 13:43
quelle

3 Antworten

17

Es gibt zwei verschiedene Möglichkeiten, ListView-Elemente nach Position im Adapter oder nach sichtbarem Platz auf dem Bildschirm zu indizieren. Ein Element befindet sich immer an der gleichen Position innerhalb des Adapters (es sei denn, Sie ändern die Liste). Der Index in view.getChildAt () hängt davon ab, was auf dem Bildschirm angezeigt wird.

Die von pointToPosition zurückgegebene Position ist die Position innerhalb des Adapters. Wenn Sie die physische Ansicht anzeigen möchten, müssen Sie berücksichtigen, ob die Ansicht gescrollt wird. Versuchen Sie Folgendes:

%Vor%     
Cheryl Simon 26.01.2010, 16:32
quelle
1

Ich habe das gelöst, aber es fühlt sich an wie ein kleiner Hack und ist wahrscheinlich nicht die effizienteste Implementierung. Sicherlich muss es einen saubereren Weg geben, dies mit den Android-APIs zu tun?

Im folgenden Code habe ich eine HashMap zu meinem ArrayAdaptor hinzugefügt, um zu verfolgen, welche Bildschirmansichten welche Zeilen enthalten (da diese beim Scrollen der Liste wiederverwendet werden)

Alle Änderungen, die ich an meinem ursprünglichen Adapter vorgenommen habe, wurden unten kommentiert.

%Vor%     
Damian 27.01.2010 10:34
quelle
1

Dies ist der beste Weg, um festzustellen, welche Zeile berührt wurde.

%Vor%

Sie können dies in der onTouch-Methode am ACTION_DOWN-Ereignis verwenden. Grüße.

    
adrian 14.04.2014 12:10
quelle

Tags und Links