2011-09-12 10 views
7

Tengo una vista de lista que está personalizada para mostrar una imagen y 2 textview. Simplemente quería resaltar uno de los elementos de mi lista.setItemChecked (int position, boolean value) no funciona?

En primer lugar, voy con el método setSelection de listview, que finalmente descubrí que no es el camino, ya que no está trabajando en modo táctil.

Por lo tanto, realicé algunas búsquedas y descubrí que necesitaría usar el método setItemChecked. Por lo tanto, hago un color de lista de estado.

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

Lo usé para establecer el color de fondo de mi elemento de lista personalizado.

De la actividad Lista, llamo setItemChecked (position, true) a un índice específico de mi lista de lista.

Desafortunadamente, no parece funcionar para mí. ¿Hay algo perdido? Alguien tuvo suerte con eso?

Nota **, obtuve datos para la vista de lista de la red. Hago setItemChecked solo después de tener datos en mi lista de lista.
Mi vista de lista también está en modo de opción única.

+0

Mostrar va a implementar el evento setItemCheck. –

+0

listview.setItemChecked (1, verdadero); ¿Eso es lo que necesitas? La llamada está en onResume(). Lo intenté con muchas posiciones (0,1,2,3, ...) – PH7

+0

Solo tengo curiosidad. ¿Qué hace '' hacer? –

Respuesta

8

Me temo que no es una manera fácil de hacerlo en el Android Framework.

Con el fin de obtener la setSelection (...) que trabajan, su punto de vista tiene que implementar la interfaz follogin: android.widget.Checkable

Probablemente está utilizando un poco de diseño para Vista (una imagen y 2 TextView en un LinearLayout tal vez ?), que no implementa la interfaz de Checkable.

Lo que puedes hacer es crear una clase de vista personalizada que implemente chequeable.

consulte el enlace de abajo para un LinearLayout comprobable:

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


Si desea cambiar el fondo, que reescribir el método setChecked a hacer lo que quiera. ejemplo muy sencillo:

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

Avíseme si ayudó/trabajó, o si necesita más explicación. – balazsbalazs

+0

Thz para la entrada. Desafortunadamente, esto no es lo que estoy pidiendo. setSelection funciona perfectamente bien en su enlace referido. Pero carece de retroalimentación visual. En otras palabras, mi elemento de la lista no se destacó aunque está en la posición correcta (la vista de lista se desplaza a la selección). FYI, lo probé siguiendo el enlace en su respuesta. :) – PH7

+0

thz. resolvió mi problema con resaltar. :) – PH7

1

intente incluir el atributo android:state_enabled también.

+0

sry. no funcionó. de todos modos. – PH7

8

conjunto para su lista de selección de fila fondo, que tiene recurso para 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

Esta es la manera más fácil de resaltar la fila seleccionada en la vista de lista. No funcionará si listview no tiene ** atributo ** choiceMode 'android: choiceMode =" singleChoice "' –

Cuestiones relacionadas