LIstView

android ListView及ArrayAdapter,SimpleCursorAdapter,SimpleAdapter用法示例

文章分类:移动开发

 

选自: 1http://www.cnblogs.com/wservices/archive/2010/06/17/1759793.html

2 [原创技术] 连载(12 ):SimpleCursorAdapter 类与数据绑定

3http://blog.sina.com.cn/s/blog_6213b4e50100lk9i.html

 

布局

LiveActivity 本身继承了关于 List 操作的众多接口,我们可以方便的重写这些操作中需要的方法来实现自己需要的功能。

如果要用 ListActivity ,则 ActivityLayout 文件中必须包括一个(只能一个) ListView ,且 ListView id="@id/android:list"

如下代码,一个标准的 ListActivity Layout 文件:

  <?xml version="1.0" encoding="utf-8"?>

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

         android:orientation="vertical"

         android:layout_width="fill_parent"

         android:layout_height="fill_parent"

         android:paddingLeft="8dp"

         android:paddingRight="8dp">

     <ListView android:id="@id/android:list"

               android:layout_width="fill_parent"

               android:layout_height="fill_parent"

               android:background="#00FF00"

               android:layout_weight="1"

                android:drawSelectorOnTop="false"/>

     <TextView id="@id/android:empty"

               android:layout_width="fill_parent"

               android:layout_height="fill_parent"

               android:background="#FF0000"

               android:text="No data"/>

  </LinearLayout>

 

请注意 ListViewTextViewid 。前面说了, ListViewId 为固定不变的,为” @./idandroid:ost ”, ListActivity 会根据 id 自动查找 ListView 引用;但如果当 ListView 中没有值而又想提示一句话时,那么用于指定显示提示信息的 TextViewid 必须为” "@id/android:empty" ,提示的信息可以通过 android:text 进行指定。

 

绑定

OK ,关于如何布局说完了,那么如何给 List 绑定值,并进行操作呢?

首先我们需要确实的是, ListView 的布局也完成了,并通过调用 setContentView() 进行了绑定,但直到现在我们还没有确定 ListView 中的第一行显示的格式是什么,是直接显示文字还是要“图文并茂”的显示。

Android 系统为我们提供了多种模板进行选择 (android.R.layout) ,如

  Simple_list_item_1 每项有一个 TextView

  Simple_list_item_2 每项有两个 TextView

  Simple_list_item_checked CheckView 的项

  Simple_list_item_multiple_choise 每项有一个 TextView 并可以多选

  Simple_list_item_single_choice 每项有一个 TextView ,但只能进行单选。 

 

但然,如果以上项模板还无法满足你的要求,那只能自定义模板了(相当简单,就是定义一个 layout 布局)。如果你做的 asp.net 的开发的话,是否对 dataList 控件有印象呢。如果对 DataList 有印象,那么理解 ListView 也就相当的简单了。

自定义模板可以根据自己的需要定义成任意的格式,包括图片、方案及其他可显示的 View ,不用多说,自己定义就好了,关键是如果使用并进行模板的绑定。

如何要对 ListView 进行数据绑定,必须使用到一个接口: Adapter

其中最经常与 ListView 进行配合使用的有 ArrayAdapterCursorAdapterSimpleAdapter 等。

从名称可以看出 ArrayAdapter 使用的是一个 ArrayAdapter 做为数据源, SimpleCursorAdapter 使用的是一个 Cursor 使用数据源,都比较容易理解,那么如何使用 SimpleAdapter 作为数据的适配器呢。 Ok ,从易到难。

ArrayAdapter:

  ListView listView;

  String[] data = { "Item1", "Item2",

        "Item3", "Item4", "Item5" };

  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 类的子类,用于操作数据库

见附件:

         public class DBService extends SQLiteOpenHelper{}     

    由于本例不需要对 test.db 进行升级,因此,只有在 DBServie 类的 onCreate 方法中有创建数据表的代码。 DBService 类创建了一个 test.db 数据库文件,并在该文件中创建了 t_test 表。在该表中包含了两个字段: _idname 。其中 _id 是自增字段,并且是主索引。

下面来编写 Main 类。在该类的 onCreate 方法中创建了 DBService 对象,然后通过 DBService 类的 query 方法查询出 t_test 表中的所有记录,并返回 Cursor 对象。见附件

         public class Main extends Activity{}

SimpleCursorAdapter 类构造方法的第 4 个参数表示返回的 Cursor 对象中的字段名,而第 5 个参数表示要将该字段的值赋给哪个组件。该组件在第 2 个参数指定的布局文件中定义。

 

注意:在绑定数据时, Cursor 对象返回的记录集中必须包含一个叫“ _id ”的字段,否则将无法完成数据绑定。也就是说 SQL 语句不能是 select name from t_contacts 。如果在数据表中没有“ _id ”字段,可以采用其他的方法来处理。详细处理方法见本章的实例 39

 

小知识:数据库文件存到哪了?

    光看到本节的例子建立了 SQLite 数据库文件,那么数据库文件被放到哪个目录了呢。如果使用 SQLiteOpenHelper 类的 getReadableDatabasegetWritableDatabase 方法获得 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 中的数据。我们先看每一个列表项,假设列表项所对应的布局文件中包含了两个组件: TextViewEditTextid 分别为 textviewedittext 。那么在加载列表项时,需要通过组件的 iddata 参数中 List 元素中的 Map 对象对应。因此, from 参数 Map 对象的 key ,而 to 表示组件的 id ,例如,本例中的参数值为 from = new String[]{"textview", "edittext"}to = new int[]{R.id.textviewR.id.edittext} 。意思就是将 Map 对象中 keytextviewvalue 绑定到 R.id.textview 上, edittext 也类似。

现在来看 data 参数,一个 ListView 由多个列表项组成。每一个列表项由一个 Map 对象提供数据,而多个列表项则由 List 对象提供多个 Map 对象。 OK ,就是这么简单,只要了解了它们的工作原理,一切就可以搞定。如果还不太明白,自己做个例子吧。 good luck

这是我做的一个小例子,你如果有什么不明白可以做一下,就知道了。

见附件 simpleAdapter.xml 文件 ,TestSimpleAdapter

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值