Tutorial del Bloc de notas de Android - onListItemClick

Completé la Parte 2 del Tutorial del Bloc de Notas y todo funciona bien. Pero hay una cosa que no puedo entender por qué está funcionando;)

La devolución de llamada onListItemClick recupera los parámetros:

  • ListView l - Comprobar
  • Ver v - Verificar
  • posición: posición del elemento en el que el usuario hizo clic, comenzando con un índice de base cero (¿verdad?)
  • id: ID de fila del elemento en el que el usuario hizo clic

Este parece ser el mismo rowId que se usa en las "notas" de la tabla SqlLite DB ... pero ¿dónde diablos sabe ListActivity que usamos esta columna como Id de fila? No encontré ningún mapeo entre la Lista y la tabla DB, solo el Cursor que enlazamos en fillData. Pero solo hay un mapeo entre la columna Título y el id de text1 en la interfaz de usuario. Entonces, ¿dónde está el enlace rowId? ¿Y si quisiera cambiar esa vinculación a otra fuente?

Gracias de antemano Alex

preguntado el 08 de noviembre de 11 a las 15:11

de la columna _id en Cursor ... -

2 Respuestas

Este NO es un ID de fila como en SQL. Las bases de datos son completamente diferentes de los elementos de formulario.

rowID en este contexto es simplemente un índice basado en 0 para indicarle en qué está haciendo clic. Su Cursor simplemente está llenando datos en ListView desde una tabla. A menos que esté realizando consultas directas con ContentProviders o consultas SQLite, no debería tener que seleccionar las filas.

¡Espero que esto ayude!

respondido 08 nov., 11:20

Gracias por su respuesta, pero esto genera 2 preguntas más: si este no es el ID de fila de la base de datos, ¿por qué podemos simplemente poner el parámetro 'id' del método onListItemClick a la intención como editIntent.putExtra (NotesDbAdapter.KEY_ROWID, id) ? Eso inferiría que DB.rowID = ListView.Id. La otra pregunta es la diferencia entre la posición y el parámetro id. En mi ejemplo, tenía 2 entradas e hice clic en la segunda posición que tiene = 2 y rowId = 1 asumiendo que agregué y eliminé notas antes de depurar. - Cerveza Alexander

@Alexander Beer vea mi comentario ... de todos modos ... puede ser ROWID de db o cualquier otro PK de su tabla ... todo lo que necesita hacer es "cambiarle el nombre" en una consulta como "SELECT blabla AS _id, resto, columnas, vaya, aquí DESDE la tabla "... EDITAR: olvidé mencionar ... AFAIK en sqlite si usa su propio PK entero / largo, ROWID apunta a esta columna - Selvin

¡Ah, gracias, esto tendría sentido! Es una pena que el tutorial no lo mencione en absoluto. - Cerveza Alexander

La SimpleCursorAdapter (en el método fillData ()) enlaza los datos del cursor de la base de datos a la vista de lista. Cada vez que se hace clic en un elemento, el CursorAdapter se da cuenta de qué elemento se hace clic y pasa la identificación a la lista de actividades.

respondido 08 nov., 11:20

Gracias por tu respuesta. Pero, ¿qué pasa con la operación deleteNote () en NotesDBAdapter? Recibe el rowId y ejecuta una operación de eliminación como return mDb.delete (DATABASE_TABLE, KEY_ROWID + "=" + rowId, null). El método dleteNote () se llama en onContextItemSelected () con AdapterContextMenuInfo.id. ¿No implica esto también que el rowId en la interfaz de usuario debe ser el mismo en la base de datos? ¿O es simplemente "aleatorio"? Lo siento estoy confundido ;) - Cerveza Alexander

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.