/ / Не вдається отримати елементи з ListAdapter - android, sqlite, listview, android-cursor

Не вдається отримати елементи з ListAdapter - android, sqlite, listview, android-cursor

Я читаю дані з бази даних:

private MyDatabase db;
private Cursor cities;
private ListAdapter cityListAdapter;
private ListView    citiesListView;

db = new MyDatabase(getContext());
cities = db.getCities();

І встановіть адаптер для нього:

cityListAdapter = new SimpleCursorAdapter(getContext(),
android.R.layout.simple_list_item_1,
cities,
new String[] {"city"},
new int[] {android.R.id.text1},0);

citiesListView.setAdapter(cityListAdapter);

Я бачу ListView заповнено правильно. Але коли я намагаюся отримати рядок елемента, я натомість отримую дивний рядок: android.database.sqlite.SQLiteCursor@4251fac0

Ось мій код для цього:

citiesListView.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
String str = cityListAdapter.getItem(position).toString();

chosenCityTextView.setText(str);
}
});

Чому я не отримую рядок, який відображається в ListView?

Відповіді:

1 для відповіді № 1

Оскільки метод getItem повертає курсор, і тоді вам потрібно використовувати getColumnIndex та getString, щоб отримати ефективне значення поля, яке ви хочете. Також див Повернути об'єкт з CursorAdapter.get ()

Приклад коду:

Cursor cursor = (Cursor) cityListAdapter.getItem(position);
String city = cursor.getString(cursor.getColumnIndex("city"));
chosenCityTextView.setText(city);

Так, як ви робили раніше, викликали метод .toString () на об'єкті курсора, тому у вас вийшов той дивний рядок (що є адресою об'єкта в Java).