У меня проблема с пониманием того, почему мой ListActivity и соответствующий ему listView пусты, когда я вызываю метод close () для объекта cursor?
Позвольте мне немного объяснить ...
Я беру некоторые значения из БД и получаю результат в своем объекте курсора. После этого я создаю свой SimpleCursorAdapter и связываю столбец из базы данных с полем в моем listView.
Работает как шарм, но ...
Если я вызываю cursor.close () в конце метода onCreate (), мой listView отображается пустым?
Если я регистрирую значения от курсора до LogCat, они остаются там до вызова cursor.close (), и это имеет смысл, но почему listAdapter очищается, когда cursor.close () em> называется ??? Я ожидал бы, что ListAdapter listAdapter = new SimpleCursorAdapter (...) будет хранить значения, которые «привязаны» к listView, пока наша активность не будет уничтожена ...
Почему это так? Когда и зачем нужно закрывать курсор?
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
Другой вопрос - это скорее вопрос базового типа языка Java ... Я исхожу из фона PHP OO, и там, если вы определяете переменную-член, вы должны работать с ней в методах объекта, используя синтаксис $ this-> cursor . Я заметил, что в Android / Java мне не нужно использовать this.cursor.getCount (), чтобы получить от него ссылку / значение. Достаточно сказать cursor.getCount () Почему это разрешено?