Как изменить выделение ListView синей подсветкой с помощью пользовательского изображения (не селектора)?
У меня есть ListView, и я хотел изменить синюю подсветку по умолчанию, когда он установлен на listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
для пользовательского изображения не только когда элемент выбран / нажат, но также остается выбранным / нажатым с помощью этого кода:
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// TODO Auto-generated method stub
v.setBackgroundResource(0);
view.setBackgroundDrawable(getResources().getDrawable(
R.drawable.list_item_highlight_short));
v = view;
}
Проблема в том, что если у меня есть 20 элементов в моем ListView, некоторые элементы, которые не в пределах представления, будут выделены и не включены в v.setBackgroundResource(0);
Как я могу удалить BackgroundResource всех элементов в ListView, чтобы я мог установить выбранный элемент в качестве пользовательского фона изображения, чтобы указать состояние "выбрано"?
3 ответа
Попробуй переопределить getView
метод вашего адаптера. И сделать эту работу в этом методе.
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.Your_listview_layout, null);
}
if (listview.isItemChecked(position)) {
v.setBackgroundResource(R.drawable.list_item_highlight_short);
} else {
v.setBackgroundResource(0);
}
return super.getView(position, v, parent);
}
Пожалуйста, попробуйте использовать свойство ListSelecter вашего списка
например:
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:listSelector="#0000ff" >
</ListView>
Сохраните позицию выбранного элемента в вашем адаптере. Как и в приведенной выше функции adapter.setPosition(position). Затем в функции getView адаптера проверьте, выбрана ли позиция, и измените фон соответственно.