无法从 ListAdapter 获取项目

Can't get items from 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。但是当我尝试获取项目的字符串时,我得到了一个奇怪的字符串: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 中的字符串?

因为getItem 方法returns 一个游标,然后你必须使用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 中对象的地址)。