Rozerwanie włosów na strzępy, starając się, aby Android ListView zrobił to, co chcę.Jak uzyskać selektor elementów ListView z Androidem do użycia state_checked
Chcę mieć tryb ListView w trybie pojedynczego wyboru z niestandardowym układem wierszy, który ma inny kolor tła dla zaznaczonych, wciśniętych i zaznaczonych (tzn. Wybór jest zaznaczony kolorem, a nie znacznikiem wyboru - to właśnie normalnie nazywam "selekcja", ale wybór w Androidzie wydaje się być linią, którą wybieram zanim ją nacisnę)
Pomyślałem o wypróbowaniu selektora tła z trzema stanami w nim. Działa dobrze dla state_selected i state_pressed, ale nie state_checked. Stworzyłem więc CheckableRelativeLayout, który rozszerza RelativeLayout i implementuje Checkable i służy do widoku każdego wiersza.
Uproszczona wersja znajduje się tutaj:
<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 wygląda
<?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>
kolory są zdefiniowane w innym miejscu.
To nadal nie działa. Tak więc w niestandardowym narzędziu ListAdapter śledziłem wiersz "sprawdzany" i wypróbowywano (w getView)
, jeśli (pozycja == zaznaczona pozycja) ret.getBackground() .setState (CHECKED_STATE_SET);
I nadal nie działa. Jak mogę zrobić to, co chcę?
Dzięki - Spróbuję to uwagę i zobacz, czy to działa (musisz wykopać mój kod, aby go dopasować!) – MrPurpleStreak
Chciałbym awansować, gdybym mógł! – Gallal
Lepsze niż to, że zamiast ustalania klikalne = true i przesłanianie CheckableLinearLayout za performClick(), to zmienić: @Override (zaznaczone logiczna) \t public void setChecked { \t \t mChecked = sprawdzane; \t za (Cienkowite c: mCheckableViews) { \t \t \t c.setChecked (sprawdzone); \t \t} \t \t refreshDrawableState(); \t} –