无法从ListAdapter获取项目

时间:2015-06-06 20:00:24

标签: android sqlite listview android-cursor

我从数据库中读取数据:

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中显示的字符串?

1 个答案:

答案 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中对象的地址)。