Чтобы подвести итог этого поста и, возможно, помочь кому-то еще в будущем, я предлагаю ответ:)
Сначала нам нужно создать файл res/drawable/list_item_background.xml
со следующим содержимым:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_activated="true"
android:drawable="@color/list_item_activated" />
<item
android:drawable="@color/list_item_default" />
</selector>
Конечно, укажите свои ресурсы для рисования.И вы также можете добавить другие <item>
элементы с различными состояниями, такими как state_pressed
, state_focused
и т. Д.
Затем мы должны установить параметр background
для нашего элемента элемента списка ViewGroup
element (fires/layout/list_item_layout.xml
) вот так:
android:background="@drawable/list_item_background"
Следующий шаг - изменение нашего пользовательского класса Adapter
.Вот следующий фрагмент кода:
public class CustomAdapter extends BaseAdapter {
private List<Item> items;
private LayoutInflater itemInflater;
private int selectedIndex; // add this
public CustomAdapter(Context c, List<Item> items) {
this.items = items;
this.itemInflater = LayoutInflater.from(c);
selectedIndex = -1; // add this
}
/* add this */
public void setSelectedIndex(int index) {
selectedIndex = index;
notifyDataSetChanged();
}
/* other adapter's stuff */
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
convertView = itemInflater.inflate(R.layout.list_item_layout, parent, false);
}
// add this
convertView.setActivated(selectedIndex != -1 && position == selectedIndex);
/* do some stuff */
return convertView;
}
}
Наконец, мы должны вызвать метод адаптера setSelectedIndex(position)
в onItemClick(...)
методе AdapterView.OnItemClickListener
.
public class YourActivity extends Activity
implements AdapterView.OnItemClickListener {
private CustomAdapter mCustomAdapter;
/* activity implementation */
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mCustomAdapter.setSelectedIndex(position);
}
}
Теперь мы можембудьте удовлетворены правильной подсветкой пунктов списка:)
PS Если мы хотим включить режим множественного выбора в нашем списке, мы просто поместим следующую строку в наш класс деятельности, где хранится экземпляр listView
:
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
Таким образом, мы получим правильное выделение нескольких элементов.
- надеюсь, это кому-нибудь поможет:)