android listview obtenir la vue de poste par poste
J'ai listview avec la coutume adaptateur (adaptateur de base). Je veux obtenir la vue à partir de listview par position. J'ai essayé mListView.getChildAt(position)
, mais ça ne fonctionne pas. Comment puis-je obtenir la vue de poste par poste?
- Vous devez expliquer ce "pas de travail" signifie dans votre situation. Aussi poster le code qui ne fonctionne pas et aucun message d'erreur que vous pourriez avoir.
- obtenez vue comme
listView.getChildAt(pos - listView .getFirstVisiblePosition());
<position est la position sur laquelle vous avez cliqué) changement de la vue, puis appelrefreshDrawableState()
sur cette vue de le mettre à jour.. simple 🙂
Vous devez vous connecter pour publier un commentaire.
Utiliser ceci :
if (pos < firstListItemPosition || pos > lastListItemPosition ) { return listView.getAdapter().getView(pos, null, listView);
ImageView bak = (ImageView) getViewByPosition(wantedPos, listView).findViewById(R.id.gas_gauge);
ListView
pour unArrayList
qui a mon avis dans la classe d'adaptateur, de sorte qu'il n'était pas accessible à partir de laMainActivity
.getChildAt
qui est une partie de laListView
. Il me semblait que vous étiez en train d'insinuer que répondre a certains rond-point de manière à éviter uneClickListener
quand il n'y a pas d'indication dans la question qu'un clic a même été publié. Il n'est pas nécessaire d'être grossier à ce sujet.Vous pouvez obtenir seulement visible Vue de ListView parce que la ligne de vue en liste sont réutilisables. Si vous utilisez
mListView.getChildAt(0)
vous obtenez première vue visible. Ce point de vue est associé à l'élément de la carte à la positionmListView.getFirstVisiblePosition()
.Meilleure façon de modifier l'apparence/quelle que soit la rangée de points de vue une fois la liste est tiré est de changer quelque chose dans les données ListView tire (le tableau d'objets est passé dans la Carte) et assurez-vous de tenir compte de cela dans votre fonction getView (), puis redessiner la liste en appelant
EDIT: alors qu'il y a une manière de le faire, si vous devez pour ce faire, les chances sont en train de faire quelque chose de mal. Alors que rares sont les cas limites que je peux penser, généralement à l'aide de
notifyDataSetChanged()
et d'autres mécanismes intégrés est un moyen d'aller.EDIT 2: l'Une des erreurs les plus courantes que les gens font est d'essayer de trouver leur propre façon de répondre à l'utilisateur en cliquant sur/de la sélection d'une ligne dans la liste, comme dans l'un des commentaires à ce post. Il existe une façon de le faire. Voici comment:
ListView a beaucoup de fonctionnalités et il n'est pas nécessaire de réinventer la roue pour les cas les plus simples. Depuis ListView s'étend AdapterView, vous pouvez définir le même Auditeurs, comme OnItemClickListener comme dans l'exemple ci-dessus.
refreshDrawableState()
sur ce point de vue pour le mettre à jour 🙂listView.getChildAt(pos - listView .getFirstVisiblePosition());
notifyDataSetChanged()
pourrait causer la perte de cliquez sur des événements à partir d'éléments de l'INTERFACE utilisateur à l'intérieur de chaque ligne. Ce qui est gênant pour l'expérience utilisateur que le toucher n'est pas aussi excepté quelques fois. Si il n'y a pas de gestionnaire d'événement attaché à n'importe quel élément de la ligne, et c'est très bien. Mais ce n'est pas un moyen efficace pour mettre à jour tout seul élément.