Pregunta

Tengo un ListView respaldado por un ArrayAdapter personalizado donde cada elemento tiene 2 LinearLayouts: uno lo llamo encabezado y el otro, cuerpo.El cuerpo está oculto (desaparecido) hasta que el usuario hace clic en la fila y en ese momento se desliza hacia afuera.El segundo clic (en la cabeza) ocultará el cuerpo.Sin embargo, si el usuario hace clic en el cuerpo, se genera otra actividad.Todo esto funciona bien, aquí viene el problema:

Cuando el usuario presiona el cuerpo, quiero una indicación visual de la acción de la misma manera que el elemento de la lista normal parpadeará sobre un fondo naranja cuando se presione.No obtengo esto de forma predeterminada ya que (mi teoría) el evento onPress es interceptado por la vista del cuerpo y no procesado por el elemento de la lista.

Lo primero que intenté fue ejecutar body.setBackground('#ff00ff') (no importa el color) en el evento onPress.Eso no funcionó ya que (sospecho) no se puede volver a pintar después de la llamada.Luego indagué un poco más y decidí usar <selector/>-basado en antecedentes.yo definí body_background.xml en drawable carpeta y la asignó a la propiedad de fondo del cuerpo.

Allí noté que el fondo solo cambiará si la lista procesa el par.Por ejemplo si configuro <item android:state_selected="true" android:drawable="@drawable/selected"/> luego, cuando presiono la cabeza, el fondo de ambos elementos (cabeza y cuerpo) cambiará, sin embargo, cuando presiono el cuerpo, nada.

Entonces, para resumir mi pregunta: ¿cómo cambio el fondo del elemento secundario en el elemento de la lista si le asigno un controlador onClick personalizado?Cualquier sugerencia será muy apreciada.

¿Fue útil?

Solución

OK. Aquí hay más información que excavo en el camino.

  1. Actualmente estoy tratando de cambiar la implementación a ExpandableListView que proporciona la funcionalidad que tenía que codificar (cuerpo deslizante). El problema que puedo tener aquí es que tengo un & Quot; infinito & Quot; implementación de la lista y estoy usando el método add de ArrayAdapter # para agregar elementos dinámicamente a la lista durante el desplazamiento (consulte mi tutorial en androidguys.com ) Bueno, falta el método add en BaseExpandableListAdapter, así que necesito ver si agregar elementos a la matriz interna funcionará (no funcionó para ArrayAdapter) posiblemente haciendo ExpandableListView # notifyChanged () se encargará de eso
  2. El hecho de que no veo nada cuando estoy usando directamente el método setBackgroundColor probablemente se deba a la siguiente llamada a startActivity llamada que detiene toda la pintura hasta que se muestre una nueva Actividad

P.S. Esto se ha resuelto cambiando a ExpandableListView. Y puedo agregar, ¡es hermoso! No es necesario inventar nada

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top