Necesito averiguar la posición de píxel de un elemento en una lista que se ha mostrado usando un ListView. Parece que debería obtener uno de TextView y luego usarlo getTop(), pero no puedo averiguar cómo obtener una vista secundaria de un archivoListView .
Actualización: los elementos secundarios de ViewGroupno se corresponden 1 a 1 con los elementos de la lista, para a ListView. En cambio, los elementos ViewGroupsecundarios de 'corresponden solo a las vistas que son visibles en este momento. Entonces getChildAt()opera en un índice que es interno al ViewGroupy no necesariamente tiene nada que ver con la posición en la lista que ListViewusa.

firstPositiondebería serint firstPosition = listView.getFirstVisiblePosition() - listView.getHeaderViewsCount();arreglar esto.ListViewya está manejando "mover" las vistas secundarias después de reciclarconvertViews antiguas , etc., por lo que puede estar seguro de queListView.getChildAt(0)es la primera vista adjunta desde el adaptador. Es posible que no sea completamente visible (y es posible que ni siquiera sea visible en absoluto, según elListViewumbral de "visibilidad" antes de reciclar una vista que se considera "desplazada fuera de la vista")Este código es más fácil de usar:
fuente
Una búsqueda rápida de los documentos de la clase ListView ha arrojado los métodos getChildCount () y getChildAt () heredados de ViewGroup. ¿Puedes recorrerlos usando estos? No estoy seguro, pero vale la pena intentarlo.
Lo encontré aquí
fuente
Básicamente, crea dos Dibujables : uno transparente y otro del color deseado. Solicite el enfoque en la posición en la que se hizo clic (
int positioncomo se define) y cambie el color de dicha fila. Luego, revise el padreListViewy cambie todas las demás filas en consecuencia. Esto tiene en cuenta cuando un usuario hace clic enlistviewvarias veces. Esto se hace con un diseño personalizado para cada fila de laListView. (Muy simple, simplemente cree un nuevo archivo de diseño con unTextView- ¡no establezca que se pueda enfocar o hacer clic!).No se requiere adaptador personalizado - usar
ArrayAdapterfuente
fuente
Esto supone que conoce la posición del elemento en ListView:
Entonces debería poder llamar a getLeft () y getTop () para determinar los elementos en la posición de la pantalla.
fuente
getView()es llamado internamente por ListView, al completar la lista. No debe usarlo para obtener la vista en esa posición en la lista, ya que llamargetView()con null paraconvertViewhace que el adaptador infle una nueva vista desde el recurso de diseño del adaptador (no obtiene la vista que ya se está mostrando).