Strappare i capelli cercando di ottenere un ListView Android per fare ciò che voglio.Come ottenere un selettore di oggetti ListView di Android per utilizzare lo stato_checked
Voglio avere un ListView in modalità scelta singola con un layout di riga personalizzato che ha un colore di sfondo diverso per selezionato, premuto e controllato (cioè la scelta è mostrata da un colore piuttosto che un segno di spunta - questo è quello che io Normalmente chiamerei la "selezione" ma la selezione in Android sembra la linea che sto per scegliere prima di premere)
Ho pensato di provare un selettore di sfondo con i tre stati in esso. Funziona bene per state_selected e state_pressed, ma non state_checked. Così ho creato un CheckableRelativeLayout che estende RelativeLayout e implementa Checkable e utilizzato per la visualizzazione di ogni riga.
Una versione semplificata è mostrato qui:
<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 sembra
<?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>
I colori sono definiti altrove.
Questo ancora non ha funzionato. Così nel ListAdapter personalizzato ho rintracciato la "controllata" di fila e ha cercato (in GetView)
se (posizione == checkedPosition) ret.getBackground() setState (CHECKED_STATE_SET).;
E ANCORA non funziona. Come posso farlo fare ciò che voglio?
Grazie - Cercherò questo fuori e vedi se funziona (devo scavare il mio codice per adattarlo!) – MrPurpleStreak
Avrei più voti se potessi! – Gallal
Meglio di così, invece di impostare cliccabile = true e ignorando di CheckableLinearLayout performClick(), ignorare questo: @Override \t public void setChecked (booleano selezionata) { \t \t mChecked = controllato; \t \t per (Checkable c: mCheckableViews) { \t \t \t c.setChecked (selezionata); \t \t} \t \t refreshDrawableState(); \t} –