2010-08-16 9 views
9

Tengo una actividad que extiende ListView. Completo mi lista con los resultados de una consulta a la base de datos sqlite. Un elemento de lista consta de start_time, end_time, client_name y status. Estos son los 4 bits de información que necesito mostrar para cada elemento de la lista.asignando valores ocultos a un elemento listview

Mi pregunta es: ¿es posible para mí asignar elementos ocultos a este elemento ListView?

Por ejemplo, quiero almacenar el campo _id de la fila de la base de datos para ese elemento ListView, de modo que cuando hago clic en él pueda comenzar una nueva actividad basada en datos para esa fila de la base de datos.

EDITAR

El código que utilizo para llenar mi lista de mi cursor:

String[] columns = new String[] {VisitsAdapter.KEY_CLIENT_FULL_NAME, VisitsAdapter.KEY_STATUS,VisitsAdapter.KEY_CLIENT_START_TIME, VisitsAdapter.KEY_CLIENT_END_TIME}; 

// the XML defined views which the data will be bound to 
int[] to = new int[] { R.id.name_entry,R.id.number_entry,R.id.start_time_display,R.id.end_time_display }; 

SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(HomeScreen.this, R.layout.list_element, cur, columns, to); 

Dónde R.layout.list_item es el XML para mi elemento de la lista. Vengo de un fondo PHP/HTML, por lo que lo que normalmente haría aquí es tener un campo oculto para mantener mi valor _id al que podría acceder una vez que se haya hecho clic en el elemento de la lista. ¿Puedo hacer algo similar en Android? ¿Puedo poner un _id campo oculto en mi diseño xml?

Respuesta

19

Debe intentar relajarse un poco del marco mental de desarrollo web. No es necesario almacenar algo como la identificación en un campo oculto en su vista. Eso combinaría sus datos con su interfaz de usuario y crearía mucha confusión y objetos de vista innecesarios.

Si está utilizando una base de datos sqlite para almacenar sus valores, debe usar un CursorAdapter para administrar los elementos de su lista. El CursorAdapter almacena el resultado que obtuviste de la base de datos y gestiona cómo se muestran los datos al usuario. Si luego registra un onItemClickListener en su ListView, el oyente recibirá el adaptador y la posición del elemento de datos cuya celda se hizo clic en el adaptador. Ahora puede usar getItem para recuperar un cursor que apunta al resultado de la base de datos que se utilizó para crear el elemento de lista. Ahora puede obtener el id o todos los demás valores que no se muestran al usuario a partir del resultado de la base de datos y adjuntarlo a un intento de comenzar la siguiente actividad.

+0

Cuando dice que debería usar un CursorAdapter, ¿quiere decir que se opone al SimpleCursorAdapter en mi código de ejemplo? –

+2

Gracias por su respuesta. Después de buscar los documentos en listeners de elementos de la lista, he descubierto que onListItemClick pasa automáticamente el rowID del resultado del cursor. (la columna _id de la base de datos). Me estaba equivocando al respecto (como usted señaló) ya que supuse que tendría que agregarlo manualmente a la lista, no me di cuenta de que Android se encarga de esto automáticamente. Gracias, se aceptó la respuesta. –

+0

+1 para una buena explicación ... Pero en caso de SimpleAdapter, ¿cómo puedo lograr lo mismo? – hemu

1

Debería considerar la creación de un objeto java que reúna toda esta información. por ejemplo, se podría crear una clase como "ListItem" y cada artículo tendría 5 propiedades:
Start_Time
hora_final
client_name
estado Identificación (y más si es necesario)

Y entonces, tiene 2 opciones, ya sea serializar su objeto para poner el objeto completo en la base de datos, o mantener la estructura que ya tiene (supongo), y cada fila de su base de datos se convierte en un objeto ListItem. Luego, cuando consulta su base de datos, los coloca en un ArrayList y amplía ArrayAdapter para hacer su propio adaptador. Finalmente, en el método getView, llame al myListItem.getEnd_Time y a todos los métodos que necesita para mostrar sus datos, y simplemente no use el getId, que puede usar directamente desde el adaptador cuando necesite el objeto.

+0

Sephy Lo sentimos, Im bastante nuevo para el androide y yo realmente no sigo su respuesta, he publicado código relevante para mostrar dónde estoy procedentes de –

+0

¿Cuál es la forma de tratar una respuesta cuando la gente se toma el tiempo de explicarle cosas y simplemente las rechaza? No puedo creerlo – Sephy

+0

Hola Sephy, debo señalar que no fui yo quien rebajó tu respuesta. Agradezco su respuesta y el tiempo que le llevó mirar mi pregunta. No puedo decir quién lo rebajó, ya que no sé. Lo mismo aplica para la respuesta de Kuroutadori también. –

0

Si necesita no mostrar cols db distintos _id, en onItemClick de su ListView (...) que acaba de llamar:

mAdapter.getCursor(); 

entonces se puede obtener ningún cols no visualización de la lista seleccionada artículo/fila.

Como se mencionó Janusz, si sólo necesita _id, simplemente llame a:

mAdapter.getItemId(); 
Cuestiones relacionadas