Android: le changement dynamique de l'Image dans la Listview
J'ai une listview défini par le code xml suivant. J'ai besoin de basculer l'image dans la liste en cours d'exécution lorsque l'utilisateur clique sur une ligne. Comment puis-je y parvenir? Toute aide est très appréciée. Grâce
//list_item.xml
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/play"
android:id="@+id/img"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:id="@+id/txt"
/>
</LinearLayout>
OriginalL'auteur Vivek | 2010-12-27
Vous devez vous connecter pour publier un commentaire.
Vous pouvez localiser l'élément
img
vue en appelantfindViewById
sur le second paramètre (qui est leView
de l'élément cliqué) au sein de laonItemClick
gestionnaire:EDIT: Être conscient que Android réutilise élément de la liste
View
des objets (aussi appelé vue du recyclage), de sorte que la bascule dans l'état de chaque élément doit être stocké pour une utilisation ultérieure. La bascule dans l'état de chaque élément doit être consulté chaque fois qu'un élément de la liste d'affichage est lié à un élément de la liste d'affichage.Pour exemple, voici un exemple de travail d'une activité qui permet de basculer l'image de chaque élément sur cliquez sur:
Les pièces importantes pour l'étude sont les
onItemClick
de rappel et le remplacement degetView
dansMyArrayAdapter
.La
getView
méthode de laAdapter
classe est responsable pour gonfler la disposition des éléments. Dans cet exemple, je l'appelle legetView
méthode de la superclasse d'abord préparer la vue de l'article, mais puis-je m'assurer de façon appropriée pour définir l'ID de la ressource de l'élément deimg
vue:Voir aussi: Le développement d'Applications pour Android – Astuces et Bizarreries
Maintenant, je suis en mesure de changer la source de l'Imageview, mais quand j'ai faites défiler vers le bas et de revenir encore une fois, l'imageview est réinitialisé à sa source précédente. Pourquoi est-ce arrivé? Pouvez-vous m'aider?
Il sonne comme une vue de la réutilisation problème. Veuillez voir ma mise à jour de la réponse parce que j'ai ajouté un exemple de travail et ont lié à un excellent post de blog qui décrit Android de recyclage de vues.
Trebbien merci beaucoup. Cela fonctionne comme par magie pour moi.. j'utilise pour mon imageview qui je veux se comportent comme des radiobutton.. donc comment puis-je faire d'autre sélectionnés bascule pas sélectionné sur l'élément, cliquez sur? plz me montrer un moyen d'atteindre cet..
Le code est très similaire. Au lieu de la
itemToggled
d'un tableau, utilisez unint
membre pour stocker la position de la "choisi" le point. Puis, à l'intérieuronItemClick
(ouonListItemClick
si vous utilisez unListActivity
), mise à jour de laint
membre et appelnotifyDataSetInvalidated()
sur la liste de la vueMyArrayAdapter<String>
instance. J'ai du code qui fonctionne si vous en avez besoin. Poser une nouvelle question et je le posterai.OriginalL'auteur Daniel Trebbien
N'importe. J'apprécie votre effort.
Merci beaucoup pour votre réponse. Votre Solution m'a vraiment aidé.
OriginalL'auteur Jett Hsieh
Je vais générer dynamiquement la liste et ensuite se lier à la onclickitem événement, afin de faire de la setimageresource que dire par "Kiril Kirilov'.
OriginalL'auteur ykatchou
Cela peut être fait très facilement, il vous suffit de regarder sur la position de l'élément de la liste qui a été cliqué par l'utilisateur. Un bien décrite remplir le code de démonstration est que below_
J'espère que cela aidera à tous 🙂
OriginalL'auteur Rupesh Yadav
Utilisation
méthode de ImageView classe.
P. S. Ma précédente réponse semble incomplète, ici, c'est l'ensemble de la solution:
Cela fonctionne - ImageView imageView = (ImageView).findViewById(R. id.img);
Pas de. Parce que, supposons que Si j'ai 40 lignes dans ma liste, les images de tenir le même ID (c'est à dire img). Donc nous ne pouvons pas obtenir le handle de sélectionné ImageView avec un ID unique.
L'ImageView ID est R. id.img, mais l'un drawable peut être avec différents Identifiants comme R. drawable.image1, R. drawable.image2...
Ya. Donc Si je change la source de l'image correspondant à R. id.img de toutes les lignes dans ma liste va être affecté à droite? Mais je veux changer l'image en une seule ligne..
OriginalL'auteur fiction