2010-01-25 30 views
28

Tengo un pequeño problema con una funcionalidad que me gustaría implementar.onClickListener en LinearLayout

Tengo un LinearLayout, que contiene 2 TextViews. Me gustaría establecer un onClickListener en él, para que se comporte como un elemento en un ListView.

He intentado alguna posible implementación de esto, y lo he conseguido usando el atributo xml del LinearLayout.

Como yo quiero la aplicación de reaccionar visualmente a un clic en el LinearLayout (como en un ListView), puse esto en el método detector de devolución de llamada:

l.setBackgroundColor(android.R.drawable.list_selector_background); 

l es un objeto LinearLayout, inicializado con findViewById() ;

Aparece una aplicación que no responde cada vez que trato de hacer clic en el diseño. Traté de reemplazar el código en el método de devolución de llamada por un mensaje de Toast aparece, y funciona, así que supongo que el problema está en el setBackgroundColor.

¿Alguien está familiarizado con esto?

PD: lo siento, no puedo publicar más código en este momento, estoy en el trabajo.

+5

Use DDMS o 'adb logcat' para examinar el seguimiento de su pila para encontrar el origen de su excepción. Edite esta pregunta y publíquela aquí si no puede entenderla. – CommonsWare

Respuesta

62

Tiene que establecer LinearLayout atributo android:clickable="true" en el archivo de diseño xml o setClickable(true) en el código de actividad de java.

+1

Creo que '' 'android: clickable =" true "' '' sería la sintaxis. – trante

3

Encontré que setClickable (verdadero) aún causaría clics para los hijos de la distribución lineal. Descubrí que para que LinearLayout capturara el toque en lugar de sus hijos, tuve que anular el método dispatchTouchEvent, así que creé una subclase de LinearLayout solo para este propósito. Aunque parece una solución fea.

+2

Creo que es donde android: descendantFocusability = "blocksDescendants" sería más clara que la vista personalizada. https://developer.android.com/reference/android/view/ViewGroup.html # attr_android: descendantFocusability – scottyab

2

debe establecer el LineableLayout enfocable en verdadero y establecer todas las vistas secundarias enfocables en falso, no use el android: clickable = "true", pero no puede ver el efecto del clic de linelayout. Por cierto, la mejor manera es implementar la API onTouchEvent.

5

noté que todos los consejos anteriores no ayudan mientras que cualquiera de los elementos secundarios dentro de LinearLayout tenga el atributo android: textIsSelectable = "true".

0

Tuve el mismo problema, he estado intentando durante una hora todas las respuestas en SO, pero ninguna funcionó.

Entonces me di cuenta de que sólo tenía que promover mi LinearLayout a la parte inferior de la disposición, desde otros puntos de vista bloqueados, y luego se trabajó, sin añadir atributos especiales para la disposición.

Poniéndolo aquí en caso de que pueda ayudar a alguien algún día.

+0

¿Cómo lo pones en la parte inferior? –

+0

¿Qué quieres decir con abajo, quieres decir z-layer o dirección? – HopefullyHelpful

Cuestiones relacionadas