Lista personalizada clic con casillas de verificación
-
23-08-2019 - |
Pregunta
He llenado una ListActivity
de un Cursor
usando SimpleCursorAdapter
que comienza otra actividad cuando uno de los elementos de la lista se ha hecho clic. También estoy usando ViewBinder
hacer alguna transformación personalizada de los datos.
Quiero añadir un CheckBox
a cada fila de la lista, de modo que he cambiado la vista y añadido un CheckBox
con la gravedad derecha.
La adición de la CheckBox
ha eliminado la posibilidad de hacer clic en los elementos. El método onListItemClick
me imperiosa de ListActivity
ya no se llama cuando se pulsa sobre un elemento de la lista. Extracción de la CheckBox
soluciona esto. ¿Por qué es esto?
Además, ¿cómo puedo configurar la lista para que se sigue llevando a cabo mi funcionalidad requerida si se hace clic en la parte principal del elemento de la lista, sino que tenga una funcionalidad adicional cuando se comprueba el CheckBox
en el artículo? Será el establecimiento de una obra onCheckedChangedListener
o se vuelve a utilizar la misma instancia de vista para cada elemento de la lista?
Solución 2
Parece que SimpleCursorAdapter
es demasiado primitiva para lo que quería lograr.
He cambiado a la implementación de CursorAdapter
y devolviendo una nueva vista utilizando el LayoutInflater
en mi aplicación del método newView
.
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return LayoutInflater.from(context).inflate(R.layout.alarm_row, parent, false);
}
En Bindview Me continuación, establezca un OnClickListener
encargo a mi LinearLayout
principal y luego otro OnCheckedChangeListener
a la CheckBox
.
Para que todo esto se ve bien que tenía que poner el fondo de la LinearLayout
a Android de MENUITEM dibujable:
android:background="@android:drawable/menuitem_background"
Otros consejos
Como se explica aquí , el detector de clics sólo funciona si no hay otro punto de vista es focusable
. El establecimiento de su CheckBox
a focusable="false"
debe hacer el truco:
<CheckBox android:focusable="false" />