Я ответил бы, “because , Java сосет ”, но с другой стороны, возможно, это слишком очевидно †¦ В;-)
Вот хорошая статья о том, как использовать селекторы со списками.
Вместо того, чтобы установить в качестве фона android: ListView, я думаю, что вы хотите установить android: listSelector, как показано ниже:
<ListView android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:divider="@null"
android:dividerHeight="0dip"
android:listSelector="@drawable/list_selector" />
Объявите компоненты элемента списка как окончательные вне вашего setOnClickListener или чего-либо, что вы хотите применить к вашему элементу списка, например:
final View yourView;
final TextView yourTextView;
И в переопределении onClick или любого другого метода, который вы используете, просто установите цвета по мере необходимости, как this:
yourView.setBackgroundColor(Color.WHITE/*or whatever RGB suites good contrast*/);
yourTextView.setTextColor(Color.BLACK/*or whatever RGB suites good contrast*/);
Или без окончательного объявления, если, скажем, вы реализуете onClick () для пользовательского адаптера для заполнения списка, это то, что я использовал в getView () для моего setOnClickListener / onClick ( ):
//reset color for all list items in case any item was previously selected
for(int i = 0; i < parent.getChildCount(); i++)
{
parent.getChildAt(i).setBackgroundColor(Color.BLACK);
TextView text=(TextView) parent.getChildAt(i).findViewById(R.id.item);
text.setTextColor(Color.rgb(0,178,178));
}
//highlight currently selected item
parent.getChildAt(position).setBackgroundColor(Color.rgb(0,178,178));
TextView text=(TextView) parent.getChildAt(position).findViewById(R.id.item);
text.setTextColor(Color.rgb(0,178,178));
Дочерние представления в строке списка должны рассматриваться как выбранные, если выбрана родительская строка, поэтому вы должны иметь возможность просто установить нормальное состояние drawable / color-list для представлений, которые вы хотите изменить, без необходимости использовать грязный код Java , См. этот пост SO .
В частности, вы должны установить textColor
ваших textViews на ресурс XML, подобный этому:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:drawable="@color/black" /> <!-- focused -->
<item android:state_focused="true" android:state_pressed="true" android:drawable="@color/black" /> <!-- focused and pressed-->
<item android:state_pressed="true" android:drawable="@color/green" /> <!-- pressed -->
<item android:drawable="@color/black" /> <!-- default -->
</selector>