Если вы хотите иметь отдельные фоны для каждого элемента списка, вы должны объявить свой собственный Адаптер.
Получите его из BaseAdapter, и наиболее важной частью для реализации является метод getView(int, View, ViewGroup)
.
Вы должны понимать, как Android повторно использует уже существующие элементы представления элемента списка при прокрутке списка. Это означает, что в любой момент времени будет генерироваться столько раз, сколько можно увидеть на экране одновременно.
Эта оптимальная стратегия не генерации слишком большого количества представлений приводит к проблеме, заключающейся в том, что вам придется устанавливать фон для каждого элемента списка в соответствии с их положением, которое необходимо в данный момент при вызове getView. Если вы попытаетесь установить фон статически только при генерации представления, он снова появится, возможно, прикрепленный к неправильному элементу.
Метод getView
либо возвращает "convertView" в качестве второго параметра, либо не (ноль). Если ваш метод вызывается с параметром convertView, установленным на что-то, это означает: «повторно используйте это представление для элемента, требуемого прямо сейчас».
Техника, используемая здесь, хорошо описана в демоверсиях API (раздел Списки), и для этого также есть видеоблог.
Вот как это можно сделать:
public class MyAdapter extends BaseAdapter {
public View getView(int position, View convertView, ViewGroup parent) {
// position is the element's id to use
// convertView is either null -> create a new view for this element!
// or not null -> re-use this given view for element!
// parent is the listview all the elements are in
if (convertView == null) {
convertView = mInflater.inflate(R.layout.your_layout, null);
// here you must do whatever is needed to populate the elements of your
// list element layout
...
} else {
// re-use the given convert view
// here you must set all the elements to the required values
}
// your drawable here for this element
convertView.setBackground( ... );
// maybe here's more to do with the view
return convertView;
}
}
Вот и все. Если есть только несколько фоновых рисунков, я бы их тоже кешировал, чтобы вам не приходилось читать ресурсы снова и снова!
Веселись!