Нашел ответ.
Моя проблема не в состоянии селектора, я хочу, чтобы селектор был в том же состоянии для ВСЕХ предметов!
проблема в том, что я хочу, чтобы элемент был обычным, если определенное логическое значение в элементах в адаптере равно false, и цвет X, если логическое значение равно true, но даже если цвет равен X, я все же хочу, чтобы он был прозрачным после его выбора или нажатия.
Таким образом, решение заключается в следующем xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@android:color/transparent" /> <!-- pressed -->
<item android:state_selected="true"
android:drawable="@android:color/transparent" /> <!-- focused -->
<item android:drawable="@color/viewed_hotels_color" /> <!-- default -->
</selector>
Я обнаружил, что хотя сам список и получает состояние, он действительно передает это состояние своим дочерним элементам (т.е. элементам списка), которые, как я думал, он не делал.
Только для Android: фокус здесь не будет эффективным, элементы списка Android не сфокусированы, а выделены ... так что, как вы можете видеть в любом состоянии, которое не нажато или выбрано, я даю свой цвет по умолчанию, в противном случае он прозрачен, и селектор виден всем .
в моем адаптере мне нужен следующий код (в методе getView ()):
View itemView = convertedView; <- i'll spare you the layout details...
Item item = getItem(position);
if( item.isViewed() ){
itemView.setBackgroundResource(R.drawable.viewed_item_background);
}else{
itemView.setBackgroundDrawable(null);
}
это гарантирует, что каждый элемент получит правильный фон. конечно, если состояние элемента изменено на просмотренное, и я хочу, чтобы оно показывало, мне нужно вызвать notifyDatasetCahnged () на адаптере.