Разрывая мои волосы, пытаясь заставить Android ListView делать то, что я хочу.
Я хочу иметь ListView в режиме одиночного выбора с настраиваемой строкой строки, которая имеет другой цвет фона для выбранных, нажатых и отмеченных (т.е. выбор отображается цветом, а не галочкой - вот что я хотел бы обычно вызывайте "выбор", но выбор в андроиде кажется строкой, которую я собираюсь выбрать, прежде чем нажимать на нее)
Я подумал о попытке выбора фонового селектора с тремя состояниями в нем. Он отлично работает для state_selected и state_pressed, но не state_checked. Поэтому я создал CheckableRelativeLayout, который расширяет RelativeLayout и реализует Checkable и используется для представления каждой строки.
Здесь показана упрощенная версия:
<my.package.CheckableRelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/bkg_selector">
>
<ImageView android:id="@+id/animage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
/>
</my.package.CheckableRelativeLayout>
bkg_selector выглядит как
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/purple" />
<item android:state_checked="true" android:drawable="@drawable/red" />
<item android:state_selected="true" android:drawable="@drawable/darkpurple" />
<item android:drawable="@drawable/black" />
</selector>
Цвета указаны в другом месте.
Это все еще не сработало. Поэтому в пользовательском ListAdapter я отслеживал строку "checked" и пытался (в getView)
if (position == checkedPosition) . Ret.getBackground() SetState (CHECKED_STATE_SET);
И это STILL не работает. Как я могу заставить его делать то, что я хочу?