Как я могу изменить фон ListItem, когда он был выбран? - PullRequest
2 голосов
/ 27 сентября 2010

У меня есть ListView с кучей ListItem's.Когда пользователь выбирает элемент, я хотел бы изменить фон этого ListItem на изображение.Как мне это сделать?

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

1 Ответ

1 голос
/ 27 сентября 2010

Вы можете установить это в адаптере вашего ListView.То, что вам нужно сделать, это использовать setBackgroundResource на View, который вы возвращаете.Позвольте привести вам краткий пример:

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

Обратите внимание, что я использую R.drawable.the_custom_background, что означает, что вам нужно написать небольшой селектор XML.Не волнуйся, это проще, чем кажется.Вы создаете XML-файл с именем the_custom_background.xml внутри папки 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>

Обратите внимание, я снова использую @drawable/the_background_color, поэтому, наконец, создайте еще один чертеж в папке 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>

Я знаю, что это кажется очень грязным, но это способ Android.Вы также можете попытаться изменить View внутри setOnItemClickListener, но я думаю, что это нежелательно и сложнее в реализации.

...