Mon application a un questionnaire qui est affiché grâce à un listView. L'utilisateur peut répondre par true ou false en cliquant sur le ListItem. Un imageView indique que la réponse est vraie. (Je change l'imageView chaque fois que l'on clique sur ListItem)Android: Pourquoi setImageResource modifie plusieurs images dans mon listView/onListItemClick?
Globalement cela fonctionne très bien. J'ai été capable de changer l'imageView dynamiquement mais de façon surprenante quand j'utilise setImageResource, l'image change sur plusieurs lignes. Pour l'istance, si je clique sur la ligne 2 (index 1), l'image change sur la ligne 2 mais aussi sur les lignes 12 et 22.
Pour l'instant, je n'ai pas trouvé la solution. Je vous serais reconnaissant si vous avez la moindre idée pour moi.
Voici la mise en page de mon listitem
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="30dp"
>
<ImageView
android:id="@+id/ivCheck"
android:layout_width="25dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:contentDescription="selection state"
android:src="@drawable/check_grey" />
<TextView
android:id="@+id/tvId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textIsSelectable="false"
android:layout_gravity="center_vertical"
android:text="dummy text"
android:visibility="gone"
/>
<TextView
android:id="@+id/tvText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_gravity="center_vertical"
android:layout_marginLeft="14dp"
android:layout_toRightOf="@+id/ivCheck"
android:text="dummy text"
android:textIsSelectable="false" />
</RelativeLayout>
Voici ma méthode de changer l'image (dans un ListActivity)
protected void onListItemClick(ListView l, View v, int position, long id) {
ImageView image = (ImageView)v.findViewById(R.id.ivCheck);
QuizAnswer currentQuizAnswer = (QuizAnswer) quizRequest.getListAnswers().get(position);
if(currentQuizAnswer.isSelected()) {
image.setImageResource(R.drawable.check_grey);
} else {
image.setImageResource(R.drawable.check_green);
}
currentQuizAnswer.setSelected(!currentQuizAnswer.isSelected());
}
Nous vous remercions d'avance pour votre aide
Votre liste est-elle affichée correctement? Par hasard avez-vous ces éléments répétés? Probablement, ils sont la même vue, c'est pourquoi il agit comme ça. –