2015-06-06 10 views
0

Я читать данные из базы данных:Не удается получить элементы из ListAdapter

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 заселена правильно. Но когда я пытаюсь получить строку элемента, элементы я получаю странную строку вместо: [email protected]

Вот мой код для этого:

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

Поскольку метод getItem возвращает курсор, а затем вы должны использовать getColumnIndex и getString для получения эффективного значения поля, которое вы хотите. Также см Return object from CursorAdapter.get()

Пример кода:

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

, как вы делали до того, как вызов метода .ToString() объекта курсора, поэтому вы получили, что странно строка (которая является адресом из объект в java).

+0

Вы имеете в виду что-то вроде этого: 'Курсор курсор = (Курсор) cityListAdapter.getItem (position) .getColumnIndex (" city ");'? Если нет, пожалуйста, объясните далее ... –

+0

См. Обновленный ответ. –

Смежные вопросы