Проверенное состояние андроида лучше всего использовать для решения этой проблемы.
Кто-то упоминал об использовании android: background = "? Android: attr / activBackgroundIndicator".
Это просто указывает на один из ресурсов activ_background_ * в frameworks / base / core / res / res / drawable исходного кода Android. Например activ_background_holo_dark.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true" android:drawable="@android:drawable/list_activated_holo" />
<item android:drawable="@color/transparent" />
</selector>
Таким образом, по сути, вы хотите использовать state_activation для представления, когда пользователь нажимает кнопку, а также когда она находится в проверенном (то есть в постоянном выбранном состоянии) состоянии. Обратите внимание, что активация была введена только после Honeycomb, если вы ориентируетесь на более старые устройства, вам нужно полагаться на state_checked (подробнее здесь ).
Теперь, если вы хотите установить пункт как отмеченный, вам нужно позвонить listView.setItemChecked(position, true)
. Вероятно, вы захотите установить для свойства android:choiceMode
в ListView соответствующее значение (например, если вы хотите, чтобы за один раз была выбрана только одна вещь, используйте singleChoice
). Вам не нужно делать недействительными, вызов setItemChecked вызовет ретрансляцию, которая обновит представление.
Также будьте осторожны, если вы разрешаете переупорядочивать элементы в ListView, так как текущие проверенные элементы должны быть обновлены. Если вы используете стабильные идентификаторы, это будет выполнено автоматически.
Чтобы увидеть пример этого в действии, посмотрите пример кода NavigationDrawer, найденный в обучающей серии: http://developer.android.com/training/implementing-navigation/nav-drawer.html.