Вырвать мои волосы, пытаясь получить Android ListView, чтобы делать то, что я хочу.Как получить селектор элементов списка android ListView для использования state_checked
Я хочу иметь 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 не работает. Как я могу заставить его делать то, что я хочу?
Спасибо - Я постараюсь это и посмотрите, работает ли он (чтобы выкопать мой код, чтобы он в него поместился!) – MrPurpleStreak
Я бы поднял больше, если бы мог! – Gallal
лучше, чем это, вместо того, чтобы интерактивными = истина и переопределение performClick CheckableLinearLayout в(), переопределить: @Override \t общественного недействительными setChecked (булево проверено) { \t \t mChecked = проверяется; \t \t для: (см. C: m Проверяемые виды) { \t \t \t c.setChecked (проверено); \t \t} \t \t refreshDrawableState(); \t} –