Я читаю дані з бази даних:
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).