Čítal som údaje z databázy:
private MyDatabase db;
private Cursor cities;
private ListAdapter cityListAdapter;
private ListView citiesListView;
db = new MyDatabase(getContext());
cities = db.getCities();
A nastavte k tomu adaptér:
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);
Vidím to ListView
osídlené správne. Ale keď sa pokúsim získať reťazec položky, namiesto toho dostanem zvláštny reťazec: android.database.sqlite.SQLiteCursor@4251fac0
Tu je môj kód:
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);
}
});
Prečo nedostávam reťazec, ktorý sa zobrazuje v priečinku ListView
?
odpovede:
1 pre odpoveď č. 1Pretože metóda getItem vracia kurzor a na získanie efektívnej hodnoty požadovaného poľa musíte použiť getColumnIndex a getString. Tiež vidieť Vrátiť objekt z CursorAdapter.get ()
Príklad kódu:
Cursor cursor = (Cursor) cityListAdapter.getItem(position);
String city = cursor.getString(cursor.getColumnIndex("city"));
chosenCityTextView.setText(city);
Tak, ako ste to robili predtým, bolo volanie metódy .toString () na kurzorovom objekte, preto ste dostali ten zvláštny reťazec (čo je adresa objektu v jave).