2013-02-17 12 views
5

Ich habe verschiedene Farben für verschiedene Zeilen in der ListView, indem Sie die Farbe des Textfelds abhängig von der Zeilennummer (in getView() von Adapter). Wenn ich jetzt das ListView manuell nach oben scrolle, wird die korrekte Farbe in den unteren Zeilen angezeigt, die angezeigt werden. Aber wenn ich scrollTo benutze, passiert das nicht, alle angezeigten Zeilen haben die gleiche Farbe (sie werden nicht aktualisiert).Bei der Verwendung von scrollTo wird ListView nicht aktualisiert, aber beim manuellen Scrollen aktualisiert es

Hat jemand dieses Problem konfrontiert? Das scheint verwirrend!

Antwort

3

ListView#scrollTo scrollt nicht den Listeninhalt. (Es handelt sich um eine standardmäßige Ansichtsmethode, die nicht für Listen spezifisch ist: Sie scrollt die ListView-Ansicht selbst.)

Verwenden Sie stattdessen ListView#setSelectionFromTop(0, int y) zum Scrollen.

API 19+ hat eine ListView#scrollListBy(int y) Methode, wenn Sie für KitKat und höher programmieren.

+0

ich für die gleiche Lösung suchen .... scrollTo nicht die Listenansicht aktualisieren content..And mit setSelectionFromTop nicht die Listenansicht nicht bewegen .... I habe den 'y' Wert, aber ich weiß nicht, welche Position ich scrollen soll ... Irgendwelche Hinweise? – VijayRaj

+0

Wenn Sie 'setSelectionFromTop (int posittion, int y)' mit einer Position von 0 verwenden, wird die 'ListView' an den Anfang Ihrer Liste verschoben. Der "y" -Wert ist die Entfernung von der oberen Kante dieses ListView-Elements. (Sie müssen Ihren 'y' Wert möglicherweise negieren.) – Makario

+0

Ich versuchte' setSelectionFromTop (int Position, int y) 'mit der Position als 0, aber die Liste bleibt an der ersten Position (scrollt nicht) ungeachtet des' y "Wert .... – VijayRaj

0

In unserem Projekt ListView#setSelectionFromTop(0, int y) hat keine Wirkung. So gehackt wir dies in compat-style:

class Hacks { 

static { 
    Method trackMotionScroll = null; 
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { 
     try { 
      trackMotionScroll = AbsListView.class 
        .getDeclaredMethod("trackMotionScroll", int.class, int.class); 
      trackMotionScroll.setAccessible(true); 
     } catch (NoSuchMethodException e) { 
      Exceptions.crash(e); 
     } 
    } 
    listViewTrackMotionScroll = trackMotionScroll; 
} 

public static void scrollListBy(ListView listView, int y) { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
     listView.scrollListBy(y); 
    } else { 
     try { 
      listViewTrackMotionScroll.invoke(listView, -y, -y); 
     } catch (Exception e) { 
      Exceptions.crash(e); 
     } 
    } 
} 
} 
Verwandte Themen