Soy nuevo en el desarrollo de Android ... proveniente de iPhone y fondo .Net. He visto preguntas muy similares a esta, pero ninguna de ellas trata sobre SimpleCursorAdapter.Obtener el elemento seleccionado de ListView vinculado con SimpleCursorAdapter
Tengo un ListActivity básica que utiliza un cursor para enlazar datos desde una consulta de SQLite a mi ListView:
ListAdapter adapter = new SimpleCursorAdapter(
this,
android.R.layout.simple_list_item_1,
c,
new String[] {"name"},
new int[] {android.R.id.text1});
setListAdapter(adapter);
Luego, cuando se hace clic en un elemento:
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
//Difference between this:
Cursor c = (cursor)l.getItemAtPosition(position);
//and this??
Cursor c = (Cursor)l.getAdapter().getItem(position);
int categoryId = c.getInt(0);
}
¿Es esta la forma correcta para obtener la identificación del elemento que se seleccionó? Parece extraño, porque no creo que pueda usar mi cursor después de que la base de datos esté cerrada (que es después de que se vincule). ¿Cuál es el objetivo de la identificación pasada, cuando parece que no puedo encontrar la manera de obtener el elemento real de esa identificación? Además, no entiendo por qué getItemAtPosition() devolvería un cursor ... el cursor está vinculado a toda la lista; no solo una fila Finalmente, si esto es correcto, ¿hay alguna diferencia entre las dos formas de obtener el cursor? Gracias.
Gracias! Estaba llamando a startManagingCursor, ¡pero no entendía por qué hasta ahora! Un par de preguntas ... ¿Así que incluso cuando llamo a SQLiteDatabase.close(), eso no impide que mi cursor acceda a él? Y ListView no parece tener un método getCursor(). Finalmente, la identificación que se pasa a mi método ES la identificación de mi base de datos automáticamente? ¡Gracias! – GendoIkari
Ah, si llama 'close' entonces su ListView probablemente dejará de funcionar: generalmente lo que hago es reutilizar mi objeto Application como mi adaptador de base de datos: llamar abierto en' onCreate' y cerrar en 'onTerminate' y luego usar eso para empatar el ciclo de vida de la conexión de la base de datos al ciclo de vida de la aplicación. En cuanto al 'getCursor', mi error: debe ser' Cursor c = ((SimpleCursorAdapter) l.getAdapter()). GetCursor(); '. Y sí, la identificación es lo que sale de la base de datos: es bastante conveniente. – Femi
¡Gracias de nuevo por su ayuda! – GendoIkari