2011-08-25 4 views
0

J'ai un ListView dans ma disposition. Voici la mise en page pour l'élément de liste.Problème Android lié OnItemClickListener de ListView

shopitem.xml

<?xml version="1.0" encoding="utf-8"?> 
<TwoLineListItem xmlns:android="http://schemas.android.com/apk/res/android" 
    android:paddingTop="2dip" 
    android:paddingBottom="2dip" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:mode="twoLine"> 
    <TextView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/text1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:paddingTop="6dip" 
     android:paddingLeft="44dip" 
     android:textStyle="bold" 
     android:lines="1" 
     android:textColor="#FFFFFF"/> 
    <ImageView 
      android:id="@+id/playBtn" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="3dip" 
      android:layout_alignRight="@android:id/text1" 
      android:src="@drawable/btnplaypreview"/>    
</TwoLineListItem> 

Maintenant, je veux mettre un changement d'image dans playBtn OnItemClickListener. Pour cela, j'utilise le code suivant.

ListView shopActivityListView = (ListView) findViewById(R.id.shopActivityListView); 
shopActivityListView.setCacheColorHint(Color.TRANSPARENT); 
shopActivityListView.setAdapter(new ArrayAdapter<String>(getApplicationContext(), R.layout.shopitem, trackArr[1])); 

shopActivityListView.setOnItemClickListener(new OnItemClickListener() { 

@Override 
public void onItemClick(AdapterView<?> parent, View vItem, int position, long id) { 
    // TODO Auto-generated method stub 
    ImageView playBtn = (ImageView) vItem.findViewById(R.id.playBtn); 
    playBtn.setImageResource(R.drawable.eq12); 
}     
}); 

Mais rien ne se passe sur itemclick. J'ai vérifié que la méthode onItemClick est en cours d'exécution sans aucune exception. Mais rien ne change. Quel est le problème dans mon code?

+0

TwoLineListItem est une extension linearlayout? Essayez d'ajouter 'android: clickable =" true "' –

+0

J'ai essayé cela. Pas de changement. –

+0

Invalidez votre listview après playBtn.setImageResource (R.drawable.eq12) ;. –

Répondre

0

L'image d'un élément de Listview ne peut pas être modifiée directement car elle est contrôlée par l'adaptateur. Seule la méthode getView() de l'adaptateur peut définir une vue dans les éléments. Par conséquent, dans la méthode onItemClick, nous devons définir un indicateur spécifique position, puis appeler le notifyDataSetChanged() pour l'adaptateur. De plus, un adaptateur personnalisé est nécessaire, où nous devons définir la méthode getView() afin que nous ayons défini l'image en fonction de l'indicateur spécifique position ci-dessus.

+0

Pouvez-vous donner un exemple s'il vous plaît –

Questions connexes