ListView vacío si SimpleCursorAdapter cerrado ()
Tengo un problema para entender por qué mi ListActivity y su correspondientevista de la list vacío cuando llamo acerca( método encurso objeto?
Déjame explicarme un poco ...
Recupero algunos valores de una base de datos y obtengo el resultado en mi objeto cursor. Después de eso creo mi SimpleCursorAdapter y enlazar columna de db con un campo en mivista de la list.
Funciona como un encanto, pero ...
Si llamo a cursor.close () al final deonCreate () método mi listView se muestra vacío?
Si registro los valores del cursor en LogCat, estarán allí hasta que llame a cursor.close () y eso tiene mucho sentido, pero ¿por qué el listAdapter se vacía cuando cursor.close () ¿¿¿se llama??? Yo esperaríaListAdapter listAdapter = new SimpleCursorAdapter (...) para mantener los valores que están "vinculados" a unavista de la list hasta que la actividad se destruya ...
¿Por qué esto es tan? ¿Cuándo y por qué es necesario cerrar el cursor?
public class ListTrainingsView extends ListActivity{
private SQLiteDatabase db;
private ListAdapter listAdapter;
private Cursor cursor;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_trainings);
DatabaseHelper helper = new DatabaseHelper(this);
this.db = helper.getWritableDatabase();
this.cursor = db.query("trainings", fields, null, null, null, null, null);
startManagingCursor(cursor);
this.listAdapter = new SimpleCursorAdapter(this,
R.layout.list_trainings_item,
cursor,
new String[] {"name"},
new int[] { R.id.name_entry}
);
this.setListAdapter(this.listAdapter);
//If I call
//cursor.close();
//shown list is empty
Otra pregunta es más del tipo de pregunta básica del lenguaje Java ... Vengo de PHP OO background y allí, si define la variable miembro, tiene que trabajar con ella en métodos de objetos usando la sintaxis $ this-> cursor. Me di cuenta de que en Android / Java no tengo que usar this.cursor.getCount () para obtener la referencia / valor de ella. Es suficiente decir cursor.getCount () ¿Cómo es que esto está permitido?