Domanda

Ho un ListView con un mazzo di ListItem di. Quando l'utente seleziona una voce, vorrei cambiamento che sfondo di ListItem a un'immagine. Come posso fare questo?

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

Soluzione

È possibile impostare che l'adattatore del vostro ListView. Quello che devi fare è utilizzare il setBackgroundResource sul View che si sta tornando. Permettetemi di fare un breve esempio:

// 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;
}

Si noti che sto usando R.drawable.the_custom_background, il che significa che si deve scrivere un po 'di selezione XML. Non ti preoccupare, è più facile di quanto sembri. Si crea un file XML chiamato the_custom_background.xml all'interno della cartella 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>

Avviso di nuovo, sto usando @drawable/the_background_color, così finalmente creare un altro drawable nella cartella denominata res/drawable 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>

Lo so che sembra essere molto disordinato, ma questo è il modo in cui Android. Si potrebbe anche provare a modificare il View all'interno del setOnItemClickListener, ma penso che sia indesiderato e più difficile da implementare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top