2011-09-12 13 views
7

Mam listview, który jest dostosowany do wyświetlania obrazu i 2 widok tekstowy. Chciałem tylko zaznaczyć jeden z elementów z mojej listy.setItemChecked (pozycja int, wartość logiczna) nie działa?

Po pierwsze, wybieram metodę setSelection z listview, która w końcu okazało się, że nie jest tak, ponieważ nie działa w trybie dotykowym.

Tak, szukam i stwierdziłem, że muszę użyć metody setItemChecked. Tak więc tworzę kolor listy stanów.

<?xml version="1.0" encoding="UTF-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_checked="true" android:drawable="@color/checkbox_bg_fcs" /> 
    <item android:drawable="@color/WHITE" /> 
</selector> 

Użyłem go do ustawienia koloru tła mojego spersonalizowanego elementu listy.

Z działania listy wywołuję setItemChecked (position, true) do określonego indeksu mojego widoku listy.

Niestety, nie wydaje się to działać dla mnie. Czy czegoś brakuje? Czy ktoś ma na to szczęście?

Uwaga **, pobrałem dane do widoku listy z sieci. Robię setItemChecked tylko wtedy, gdy mam dane w moim widoku listy.
Moja lista jest również w trybie jednego wyboru.

+0

pokazać, wdrażają zdarzenie setItemCheck. –

+0

listview.setItemChecked (1, true); Czy tego potrzebujesz? Połączenie jest w trybie onResume(). Próbowałem z wieloma pozycjami (0,1,2,3, ...) – PH7

+0

Jestem po prostu ciekawy. Co robi "'? –

Odpowiedz

8

Obawiam się, że nie jest to łatwy sposób na zrobienie tego w systemie Android.

W celu uzyskania setSelection (...) dni roboczych, Państwa zdaniem musi implementować interfejs follogin: android.widget.Checkable

Prawdopodobnie korzystasz z jakiś układ dla View (obraz i 2 TextView w LinearLayout może ?), który nie implementuje interfejsu Checkable.

Co możesz zrobić, to stworzyć niestandardową klasę widoku, która implementuje Checkable.

sprawdzić link poniżej dla Rejestrowalne LinearLayout:

http://tokudu.com/2010/android-checkable-linear-layout/


Jeśli chcesz zmienić tło, niż przepisać setChecked metodę robienia tego, co chcesz. Bardzo prosty przykład:

@Override 
public void setChecked(boolean checked) { 
    if (checked) { 
     this.setBackgroundColor(Color.RED); 
    } else { 
     setBackgroundColor(Color.BLACK); 
    } 
} 
+0

Daj mi znać, jeśli to pomogło/zadziałało, lub potrzebujesz więcej wyjaśnień. – balazsbalazs

+0

Thz dla wejścia. Niestety, nie o to proszę. setSelection działa idealnie dobrze w Twoim poleconym łączu. Ale brakuje mu wizualnej informacji zwrotnej. Innymi słowy, moja pozycja na liście nie została podświetlona, ​​mimo że jest poprawnie umieszczona (widok listy zostaje przewinięty do zaznaczenia). FYI, testowałem, klikając link w Twojej odpowiedzi. :) – PH7

+0

thz. rozwiązał mój problem z podświetlaniem. :) – PH7

1

spróbuj również z atrybutem android:state_enabled.

+0

sry. nie wyszło. mimo to. – PH7

8

zestaw do selektora tle lista wierszy, które ma zasób dla state_activated:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:state_activated="true" android:state_enabled="true" android:drawable="@android:color/black"></item> 
    <item android:drawable="@android:color/transparent" android:state_enabled="true"/> 

</selector> 
+1

To jest najprostszy sposób podświetlenia wybranego wiersza w widoku listy. Nie zadziała, jeśli listview nie ma ** atrybutu ** choiceMode 'android: choiceMode =" singleChoice "' –

Powiązane problemy