2010-08-31 7 views
10

Tengo un ListView con algunos elementos en él. Cada fila tiene una vista de texto y un botón. Se ve así:TextView y botón en cada fila y onListItemClick()

| Algunos textos en una fila (botón) |

Ahora, cuando hago clic en este texto, no pasa nada. Simplemente no se llama una función. Pero cuando hago clic en el botón puedo manejar el evento. Yo uso onListItemClick()

Entonces, ¿qué debo usar en lugar de este TextView para poder manejar un evento (cuando hago clic en el texto)?

Antes tenía solo un TextView en cada fila y cuando hacía clic en una fila todo funcionaba bien (se llamaba a onListItemClick()).

¡Gracias de antemano!

Respuesta

9

añadir la propiedad focusable="false" a su TextView ::

<TextView 
... 
... 
     android:focusable="false" 
     /> 

y probablemente usted tendrá que hacer lo mismo con los otros elementos dentro de su ListView.

+1

Gracias, funciona. –

+1

Aunque esto funciona bien, debería considerar implementar la siguiente solución, ya que esto hará que la navegación d-pad/trackball se comporte correctamente: http://stackoverflow.com/questions/3789943/using-android-how-can-i-select -rows-from-a-listview-which-contains-button-contro/3791340 # 3791340 – sven

+1

Esto funcionará para textview, pero para imagebutton, tal vez lo necesite, ponga el código 'v.findViewById (R.id.my_btn). setFocusable (false); 'en Adapter getView. –

6

El reto es que el ListView y el botón luchan por el foco. Por lo general, solo uno de los dos puede recibir el foco (y, por lo tanto, hacer clic). En su causa, el botón es enfocable.

Para ajustar esto, puede jugar con la propiedad descendantFocusability de ListView.

¿Qué intenta lograr al tener un botón dentro de un elemento ListView? ¿Desea que suceda algo diferente cuando hace clic en el botón, frente a cuando hace clic en el elemento de vista de lista fuera del botón?

+1

sí, tal como dijiste, quiero que el botón haga una tarea diferente. Gracias por explicarlo. –

+1

Pero todavía tengo algunos problemas. Como dijiste, quiero hacer algo diferente cuando hago clic en el botón vs cuando hago clic en el ListView fuera del botón. Solo se llama a onListItemClick() cuando hago clic en algún lugar de la lista, pero no en los botones. Pensé que obtendría la Vista del botón del parámetro "v" de onListItemClick(). Entonces, ¿qué me sugieres que haga para que pueda manejar el evento de hacer clic en el botón en particular? –

+1

Este tipo: http://stackoverflow.com/questions/2679948/focusable-edittext-inside-listview tiene una solución a un problema similar que podría ser aplicable ... Tenga en cuenta, sin embargo, que las personas tienen un mal objetivo cuando intentan toque pequeños botones. Generalmente, las personas esperarán poder hacer clic en cualquier lugar de la lista de un ListView, ya que así es como funcionan la mayoría de las aplicaciones. Es posible que desee volver a pensar su interfaz de usuario para evitar tener áreas clicables anidadas. –

Cuestiones relacionadas