android ListView及ArrayAdapter,SimpleCursorAdapter,SimpleAdapter用法示例
?
2:[原创技术] 连载(12):SimpleCursorAdapter类与数据绑定
?listView=(ListView)findViewById(R.id.lv);
?listView.setAdapter(new ArrayAdapter<String>(this,
????android.R.layout.simple_list_item_single_choice, data));?
?
SimpleCursorAdapter:
SimpleCursorAdapter类构造方法的定义。
public SimpleCursorAdapter(Context context,intlayout, Cursor c, String[] from, int[] to)
在本节的例子中会通过SimpleCursorAdapter类将一个数据表绑定在ListView上,也就是说,该ListView会显示数据表的全部记录。在绑定数据之前,需要先编写一个SQLiteOpenHelper类的子类,用于操作数据库
见附件:
???????? publicclass DBService extends SQLiteOpenHelper{} ????
??? 由于本例不需要对test.db进行升级,因此,只有在DBServie类的onCreate方法中有创建数据表的代码。DBService类创建了一个test.db数据库文件,并在该文件中创建了t_test表。在该表中包含了两个字段:_id和name。其中_id是自增字段,并且是主索引。
下面来编写Main类。在该类的onCreate方法中创建了DBService对象,然后通过DBService类的query方法查询出t_test表中的所有记录,并返回Cursor对象。见附件
???????? publicclass Main extends Activity{}
SimpleCursorAdapter类构造方法的第4个参数表示返回的Cursor对象中的字段名,而第5个参数表示要将该字段的值赋给哪个组件。该组件在第2个参数指定的布局文件中定义。
?
注意:在绑定数据时,Cursor对象返回的记录集中必须包含一个叫“_id”的字段,否则将无法完成数据绑定。也就是说SQL语句不能是select name from t_contacts。如果在数据表中没有“_id”字段,可以采用其他的方法来处理。详细处理方法见本章的实例39。
?
小知识:数据库文件存到哪了?
??? 光看到本节的例子建立了SQLite数据库文件,那么数据库文件被放到哪个目录了呢。如果使用SQLiteOpenHelper类的getReadableDatabase或getWritableDatabase方法获得SQLiteDatabase对象,那么系统会在手机内存的/data/data/<packagename>/databases目录中创建数据库文件。当然,使用这两个方法也只能打开这个目录中的数据库文件。
?
SimpleAdapter:
simpleAdapter的构造函数 如下:
SimpleAdapter(Context context, List <?extends Map <String, ?>> data, int resource, String[] from, int[] to)
一个SimlpleAdapter是这个工作的。假设将SimpleAdapter用于ListView。那么ListView的每一个列表项就是 resource参数值指定的布局。而data参数就是要加载到ListView中的数据。我们先看每一个列表项,假设列表项所对应的布局文件中包含了两个组件:TextView和EditText,id分别为textview和edittext。那么在加载列表项时,需要通过组件的id和data参数中 List元素中的Map对象对应。因此,from参数Map对象的key,而to表示组件的id,例如,本例中的参数值为from = new String[]{"textview", "edittext"},to = newint[]{R.id.textview,R.id.edittext}。意思就是将Map对象中key为textview的value绑定到 R.id.textview上,edittext也类似。
现在来看data参数,一个ListView由多个列表项组成。每一个列表项由一个Map对象提供数据,而多个列表项则由List对象提供多个 Map对象。OK,就是这么简单,只要了解了它们的工作原理,一切就可以搞定。如果还不太明白,自己做个例子吧。good luck!
这是我做的一个小例子,你如果有什么不明白可以做一下,就知道了。
见附件simpleAdapter.xml文件,TestSimpleAdapter