Tengo una ListActivity simple que usa un ListAdapter personalizado para generar las vistas en la lista. Normalmente, ListAdapter solo llenaría las vistas con TextViews, pero ahora también quiero poner un botón allí.
Sin embargo, tengo entendido y experiencia que poner una vista enfocable en el elemento de la lista evita la activación de onListItemClick () en ListActivity cuando se hace clic en el elemento de la lista. El botón todavía funciona normalmente dentro del elemento de la lista, pero cuando se presiona algo además del botón, quiero que se active onListItemClick.
¿Cómo puedo hacer que esto funcione?
android
android-widget
android-listview
CodeFusionMobile
fuente
fuente
Respuestas:
como escribí en el comentario anterior, la solución es setFocusable (false) en ImageButton.
Hay una solución aún más elegante que intenta agregar
android:descendantFocusability="blocksDescendants"
en el diseño de la raíz del elemento de la lista. Eso hará que los clics enListItem sean posibles y, por separado, puede manejar los clics de Button o ImageButtonEspero eso ayude ;)
Salud
fuente
android:descendantFocusability="blocksDescendants"
fue perfecto.Espero poder ayudar aquí. Supongo que tiene un diseño personalizado para los elementos de listView, y este diseño consta de un botón y algunas otras vistas, como TextView, ImageView o lo que sea. Ahora desea que se active un evento diferente al hacer clic en el botón y que se active un evento diferente en todo lo demás.
Puede lograrlo sin usar onListItemClick () de su ListActivity.
Esto es lo que tienes que hacer:
Está utilizando un diseño personalizado, por lo que probablemente esté anulando el método getView () de su adaptador personalizado. El truco consiste en establecer diferentes oyentes para su botón y diferentes para toda la vista (su fila). Mira el ejemplo:
Su clase OnItemClickListener podría declararse como aquí:
Por supuesto, probablemente agregará algunos parámetros más al constructor OnItemClickListener.
Y una cosa importante: la implementación de getView que se muestra arriba es bastante fea, normalmente debería usar el patrón ViewHolder para evitar llamadas a findViewById ... pero probablemente ya lo sepa.
Mi archivo custom_row.xml es RelativeLayout con Button de id "button", TextView de id "text" e ImageView de id "image" - solo para aclarar las cosas.
¡Saludos!
fuente
Cuando un ListView personalizado contiene elementos enfocables, onListItemClick no funcionará (creo que es el comportamiento esperado). Simplemente elimine el enfoque de la vista personalizada, hará el truco:
Por ejemplo:
fuente
Tengo el mismo problema: ¡OnListItemClick no se activa! [SOLUCIONADO]
Eso sucede en la clase que extiende ListActivity,
con un diseño para ListActivity que el contenido TextBox y ListView anidado en LinearLayout
y otro diseño para las filas (un CheckBox y TextBox anidado en LineraLayout).
Ese es el código:
res / layout / configpage.xml (principal para ListActivity)
src /.../.../ ConfigPage.java
Esto comienza a funcionar cuando agregué row.xml
android:focusable="false"
android:focusableInTouchMode="false"
Yo uso Eclipse 3.5.2
Android SDK 10.0.1
min SDK versión: 3
Espero que esto sea útil
... y lo siento por mi inglés :(
fuente
simplemente agregue
android:focusable="false"
como uno de los atributos de su botónfuente
Tuve el mismo problema con ToggleButton. Después de medio día de golpearme la cabeza contra una pared, finalmente lo resolví. Es tan simple como hacer que la vista enfocable no sea enfocable, usando 'android: focusable'. También debe evitar jugar con la capacidad de enfoque y la capacidad de hacer clic (acabo de inventar palabras) de la fila de la lista, simplemente déjelas con el valor predeterminado.
Por supuesto, ahora que sus vistas enfocables en la fila de la lista no pueden enfocarse, los usuarios que usan el teclado pueden tener problemas, bueno, enfocarlas. No es probable que sea un problema, pero en caso de que desee escribir aplicaciones 100% impecables, puede usar el evento onItemSelected para hacer que los elementos de la fila seleccionada sean enfocables y los elementos de la fila seleccionada previamente desenfocables.
fuente
fuente
Usé getListAdapter (). GetItem (position) instanciando un objeto que contiene mis valores dentro del elemento
luego usó el método getter de myPojo, llamará a sus valores adecuados dentro del elemento.
fuente