2010-09-27 4 views
2

J'ai un ListView avec un tas de ListItem. Lorsque l'utilisateur sélectionne un élément, je voudrais changer l'arrière-plan de ce ListItem à une image. Comment puis-je accomplir cela?Comment puis-je modifier l'arrière-plan d'un ListItem lorsqu'il a été sélectionné?

listView.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
    // how do I change the ListItem background here? 
    } 
}); 

Répondre

1

Vous pouvez définir que dans l'adaptateur de votre ListView. Ce que vous devez faire est d'utiliser le setBackgroundResource sur le View que vous retournez. Permettez-moi de vous donner un bref exemple:

// lets suppose this is your adapter (which obviously has 
//to be a custom one which extends from on of the main 
//adapters BaseAdapter, CursorAdapter, ArrayAdapter, etc.) 

// every adapter has a getView method that you will have to overwrite 
// I guess you know what I'm talking about 
public View getView(args blah blah){ 
    View theView; 
    // do stuff with the view 

    // before returning, set the background 
    theView.setBackgroundResource(R.drawable.the_custom_background); 

    return theView; 
} 

Notez que j'utilise R.drawable.the_custom_background, ce qui signifie que vous devez écrire un petit sélecteur de XML. Ne t'inquiète pas, c'est plus facile que ça en a l'air. Vous créez un fichier XML appelé the_custom_background.xml dans le dossier res/drawable:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:state_pressed="true" 
     android:state_enabled="true" 
     android:drawable="@drawable/the_background_color" /> 
</selector> 

Avis à nouveau, je l'utilise @drawable/the_background_color, donc finalement créer un autre drawable dans le dossier res/drawable appelé the_background_color:

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid android:color="#FF0000" /> 
</shape> 

Je sais que ce semble être très salissant, mais c'est la façon Android. Vous pouvez également essayer de modifier le View à l'intérieur du setOnItemClickListener, mais je pense que ce n'est pas souhaitable et plus difficile à mettre en œuvre.

+0

En implémentant cette méthode, l'arrière-plan ne sera-t-il TOUJOURS jamais 'R.drawable.the_custom_background'? Je veux seulement que ce soit 'R.drawable.the_custom_background' quand on clique sur ListItem. Je ne suis pas sûr où cette logique est, j'ai supposé qu'il serait à l'intérieur de setOnItemClickListener ... –

+0

OK ... dans ce cas, essayez 'v.setBackgroundResource (R.drawable.the_custom_background);' à l'intérieur de la méthode 'onItemClick' . – Cristian

+0

Cela fonctionne. Mais quand l'utilisateur clique sur un autre listitem, je veux que l'ancien listitem revienne à la couleur de fond par défaut –

Questions connexes