J'ai besoin de connaître la position des pixels d'un élément dans une liste qui a été affichée à l'aide d'un fichier ListView
. Il semble que je devrais obtenir l'un des TextView, puis l'utiliser getTop()
, mais je ne peux pas comprendre comment obtenir une vue enfant d'un ListView
.
Mise à jour: les enfants de ViewGroup
ne correspondent pas 1 à 1 avec les éléments de la liste, pour un ListView
. Au lieu de cela, les ViewGroup
enfants de correspondent uniquement aux vues qui sont visibles actuellement. Donc getChildAt()
opère sur un index qui est interne au ViewGroup
et n'a pas nécessairement quoi que ce soit à voir avec la position dans la liste que le ListView
utilise.
la source
firstPosition
devrait êtreint firstPosition = listView.getFirstVisiblePosition() - listView.getHeaderViewsCount();
de résoudre ce problème.ListView
est déjà la manipulation « déplacer » les vues de l' enfant autour après le recyclage de vieuxconvertView
s, etc, de sorte que vous pouvez être assuré queListView.getChildAt(0)
est en fait le point de vue d' abord attaché de l'adaptateur. Il peut ne pas être entièrement visible (et peut même ne pas être visible du tout, selon leListView
seuil de «visibilité» avant de recycler une vue qu'il considère comme «défilée hors de la vue»)Ce code est plus simple à utiliser:
la source
Une recherche rapide dans la documentation de la classe ListView a révélé les méthodes getChildCount () et getChildAt () héritées de ViewGroup. Pouvez-vous les parcourir en utilisant ces derniers? Je ne suis pas sûr mais ça vaut le coup d'essayer.
Trouvé ici
la source
Fondamentalement, créez deux Drawables - un transparent et un autre de la couleur souhaitée. Demander le focus à la position cliquée (
int position
telle que définie) et changer la couleur de ladite ligne. Puis parcourez le parentListView
et modifiez toutes les autres lignes en conséquence. Cela tient compte du moment où un utilisateur clique surlistview
plusieurs fois. Cela se fait avec une mise en page personnalisée pour chaque ligne duListView
. (Très simple, créez simplement un nouveau fichier de mise en page avec unTextView
- ne définissez pas le focus ou le cliquable!).Aucun adaptateur personnalisé requis - utiliser
ArrayAdapter
la source
la source
Cela suppose que vous connaissez la position de l'élément dans ListView:
Ensuite, vous devriez pouvoir appeler getLeft () et getTop () pour déterminer les éléments sur la position de l'écran.
la source
getView()
est appelé en interne par ListView, lors du remplissage de la liste. Vous ne devez pas l' utiliser pour obtenir la vue à cette position dans la liste, car l'appelgetView()
avec null pour leconvertView
fait que l'adaptateur gonfle une nouvelle vue à partir de la ressource de mise en page de l'adaptateur (n'obtient pas la vue qui est déjà affichée).