ListView vazio se SimpleCursorAdapter fechado ()
Eu tenho um problema para entender por que meu ListActivity e seu correspondenteexibição de list vazio quando ligo parafechar( método emcurso objeto?
Deixe-me explicar um pouco ...
Recupero alguns valores de um banco de dados e obtenho o resultado no meu objeto cursor. Depois disso, crio meu SimpleCursorAdapter e vincule a coluna do db com um campo no meuexibição de list.
Funciona como um encanto, mas ...
Se eu ligar cursor.close () no fim deonCreate () método meu listView é mostrado vazio?
Se eu registrar os valores do cursor no LogCat, eles estarão lá até chamar cursor.close () e isso faz todo o sentido, mas por que o listAdapter é esvaziado quando cursor.close () é chamado??? Eu esperariaListAdapter listAdapter = new SimpleCursorAdapter (...) para manter os valores "ligados" a umexibição de list até que a atividade seja destruída ...
Porque isto é assim? Quando e por que é necessário fechar o 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
Outra pergunta é mais sobre o tipo básico de linguagem Java ... Eu venho do PHP OO background e lá, se você definir a variável membro, precisará trabalhar com ela nos métodos de objeto usando a sintaxe $ this-> cursor. Percebi que no Android / Java não preciso usar this.cursor.getCount () para obter a referência / valor dele. Basta dizer cursor.getCount () Como isso é permitido?