2010-06-24 8 views
10

¿Hay alguna forma de obtener la primera vista visible de ListView en Android?Cómo obtener la primera vista visible de un ListView de Android

Puedo obtener los datos que respaldan la primera Vista en el Adaptador, pero parece que no puedo obtener la primera Vista en ListView.

Quiero cambiar la primera vista visible después de finalizar una acción de desplazamiento. Sé que no debería guardar referencias a la vista.

+0

Las vistas se reciclan. ¿Para qué necesitas la vista específica? –

+0

Edito mi pregunta. Quiero cambiar la vista después de que el usuario haya desplazado la lista. – Janusz

Respuesta

12

En realidad, los elementos ListView son solo hijos de ListView. Así primer elemento ListView visible es:

listView.getChildAt(0) 
+0

gracias funciona muy bien si prueba la vista devuelta para null. Parece que el desplazamiento y la creación de listas a veces ocurren al mismo tiempo si comienza la actividad y, a veces, la lista no tiene un elemento secundario. – Janusz

+5

Creo que esta manera es incorrecta. Porque recibes el primer artículo que cargó. y tal vez ese artículo no sea visible primero. Pero listView.getFirstVisiblePosition() es mejor y funciona bien siempre. – NrNazifi

+0

No es exacto si hay encabezados. –

3

ListView tiene una función getFirstVisiblePosition así que para obtener la primera vista visible, el código sería:

listView.getChildAt(listView.getFirstVisiblePosition());

+7

Hay una diferencia entre la posición childAt() y la posición que devuelve getFirstVisiblePosition(). La posición de getFirstVisiblePosition es la posición en mi adaptador de datos. ChildAt solo tiene en cuenta las vistas que están visibles en la vista de lista en este momento. – Janusz

+0

Me gustó la respuesta y me pareció útil encontrar algo que funcionara. Sin embargo, usar childAt con la posición en el adaptador no funcionará. Si usa fetFirstVisiblePosition, debe volver a pasar eso al adaptador usando getItem. Así que más correcto sería adapter.getItem (listview.getFirstVisiblePosition). Sin embargo, en ese caso no tiene la vista como se le preguntó al operador. Sin embargo, gracias por señalar esto. –

3

De hecho listView.getChildAt(listView.getFirstVisiblePosition()) da el primer elemento visible,
PERO podría ser medio visible elemento de la lista.

Para obtener el primer elemento de la lista completamente visible,

if (listView.getChildAt(0).getTop() < 0) { 
    int firstCompletelyVisiblePos = listView.getFirstVisiblePosition() + 1; 
} 
0

Usted puede utilizar el siguiente código:

for (int i = 0; i <= conversationListView.getLastVisiblePosition() - conversationListView.getFirstVisiblePosition(); i++) { 
     View listItem = conversationListView.getChildAt(i); 
} 
0

listView.scrollBy (0, -40);

Esto funciona muy bien

Cuestiones relacionadas