SimpleAdapter与SimpleCursorAdapter不同在于数据源,SimpleAdapter数据源为List,SimpleCursorAdapter数据源为数据库查询结果游标Cursor。SimpleAdapter能定义各种各样的布局出来,可以放上ImageView(图片),还可以放上Button(按钮),CheckBox(复选框)
- SimpleAdapter
private List<Map<String, Object>> getListAdapter(){
List<Map<String, Object>> list=new ArrayList<Map<String,Object>>();
Map<String, Object> map=new HashMap<String, Object>();
Cursor cursor = queryData("select sort from CYFeliao_bili where type=3"); while(cursor.moveToNext()){
String sort=cursor.getString(0);
map.put("sort", sort);
list.add(map);
}
return list;
}
/*
* 数据库查询
*/
public Cursor queryData(String queryString) {
database = SQLiteDatabase.openOrCreateDatabase(query_path, null);
Cursor cursor = database.rawQuery(queryString, null);
return cursor;// 返回游标
}
在oncreate中调用
list=getListAdapter();
SimpleAdapter adapter=new SimpleAdapter(MainActivity.this, list, R.layout.listview_item,
new String[]{"sort"}, new int[]{R.id.itemText});
query_listView.setAdapter(adapter);
- SimpleCursorAdapter
注意:SimpleCursorAdapter是和数据库有关的东西,而sqlite数据库所要求的 自动增长的 id 必须是 _id这中形式 。
使用SimpleCursorAdapter给ListView填充数据时,如果数据库表中没有_id,会报异常:
05-29 16:03:17.707: E/AndroidRuntime(28723): Caused by: java.lang.IllegalArgumentException: column ‘_id’ does not exist。
修改的方式是:在确定查询字段时,可以将主键别名为_id,然后在创建SimpleCursorAdapter时指定该别名即可。如:
Cursor cursor=queryData("select number as _id,name from city where _id<15");
主要代码
Cursor cursor = queryData("select number as _id,name from city where _id<15");
SimpleCursorAdapter adapter = new SimpleCursorAdapter(MainActivity.this, R.layout.listview_item, cursor,
new String[] { "name" }, new int[] { R.id.itemText }, 0);
query_listView.setAdapter(adapter);
/*
* 数据库查询
*/
public Cursor queryData(String queryString) {
database = SQLiteDatabase.openOrCreateDatabase(query_path, null);
Cursor cursor = database.rawQuery(queryString, null);
return cursor;// 返回游标
}