Je lis les données de la base de données:
private MyDatabase db;
private Cursor cities;
private ListAdapter cityListAdapter;
private ListView citiesListView;
db = new MyDatabase(getContext());
cities = db.getCities();
Et définissez un adaptateur pour cela:
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);
Je peux voir le ListView
correctement rempli. Mais lorsque j'essaie d'obtenir la chaîne d'un élément, j'obtiens une chaîne étrange à la place: android.database.sqlite.SQLiteCursor@4251fac0
Voici mon code pour cela:
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);
}
});
Pourquoi ne reçois-je pas la chaîne qui apparaît dans le ListView
?
Réponses:
1 pour la réponse № 1Parce que la méthode getItem renvoie un curseur, puis vous devez utiliser getColumnIndex et getString pour obtenir la valeur effective du champ souhaité. Regarde aussi Retourne un objet depuis CursorAdapter.get ()
Exemple de code:
Cursor cursor = (Cursor) cityListAdapter.getItem(position);
String city = cursor.getString(cursor.getColumnIndex("city"));
chosenCityTextView.setText(city);
La façon dont vous le faisiez auparavant était d'appeler la méthode .toString () sur l'objet curseur, c'est pourquoi vous avez obtenu cette chaîne étrange (qui est l'adresse de l'objet en java).