2011-09-12 9 views
7

Ho un listview personalizzato per visualizzare un'immagine e 2 textview. Volevo semplicemente evidenziare uno degli elementi della mia lista.setItemChecked (int position, valore booleano) non funziona?

In primo luogo, vado con il metodo setSelection di listview che ho finalmente scoperto che non è il modo in cui non funziona in modalità touch.

Quindi, eseguo alcune ricerche e ho scoperto che avrei dovuto utilizzare il metodo setItemChecked. Pertanto, creo un colore elenco di stati.

<?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> 

L'ho usato per impostare il colore di sfondo della mia voce di elenco personalizzata.

Dall'attività Elenco, chiamo setItemChecked (posizione, true) a un indice specifico della mia list list.

Sfortunatamente, non sembra funzionare per me. C'è qualcosa che manca? Qualcuno ha avuto fortuna con esso?

Nota **, ho recuperato i dati per la visualizzazione elenco dalla rete. Faccio setItemChecked solo dopo che ho i dati nella mia listview.
La mia lista è anche in modalità scelta singola.

+0

Visualizza si implementa l'evento setItemCheck. –

+0

listview.setItemChecked (1, true); È quello che ti serve? La chiamata è in onResume(). Ho provato con molte posizioni (0,1,2,3, ...) – PH7

+0

Sono solo curioso. Cosa significa '' do? –

risposta

8

Ho paura che non sia un modo semplice per farlo in Android Framework.

Al fine di ottenere il setSelection (...) di lavoro, la vista deve implementare l'interfaccia follogin: android.widget.Checkable

Probabilmente sta utilizzando un qualche layout per View (un'immagine e 2 TextView in un LinearLayout forse ?), che non implementa l'interfaccia Checkable.

Quello che puoi fare è creare una classe Visualizza personalizzata che implementa Checkable.

controllare il link qui sotto per una LinearLayout controllabile:

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


Se si vuole cambiare lo sfondo, di riscrivere il metodo setChecked a fare quello che vuoi. Molto semplice esempio:

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

Fammi sapere se ha aiutato/ha funzionato, o hai bisogno di ulteriori spiegazioni. – balazsbalazs

+0

Thz per l'input. Sfortunatamente, questo non è quello che sto chiedendo. setSelection funziona perfettamente nel tuo link indicato. Ma manca di feedback visivo. In altre parole, la mia voce di elenco non è stata evidenziata anche se è posizionata correttamente (listview viene spostato alla selezione). FYI, ho fatto il test seguendo il link nella tua risposta. :) – PH7

+0

thz. ha risolto il mio problema con l'evidenziazione. :) – PH7

1

provare anche l'attributo android:state_enabled.

+0

sry. non ha funzionato. comunque. – PH7

8

set per la vostra lista di selezione fila di fondo, che ha risorsa per 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

Questo è il modo più semplice per evidenziare la riga selezionata in listview. Non funzionerà se listview non ha ** attribute ** choiceMode 'android: choiceMode =" singleChoice "' –