我从数据库中读取数据:
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
中显示的字符串?
答案 0 :(得分: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中对象的地址)。