LIstView

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

文章分類:移動開發

 

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

2 [原創技術] 連載(12 ):SimpleCursorAdapter 類與數據綁定

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

 

佈局

LiveActivity 本身繼承了關於 List 操作的衆多接口,我們可以方便的重寫這些操作中需要的方法來實現自己需要的功能。

如果要用 ListActivity ,則 Activity Layout 文件中必須包括一個(只能一個) 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>

 

請注意 ListView TextView id 。前面說了, ListView Id 爲固定不變的,爲” @./idandroid:ost ”, ListActivity 會根據 id 自動查找 ListView 引用;但如果當 ListView 中沒有值而又想提示一句話時,那麼用於指定顯示提示信息的 TextView id 必須爲” "@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 進行配合使用的有 ArrayAdapter CursorAdapter SimpleAdapter 等。

從名稱可以看出 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 表。在該表中包含了兩個字段: _id name 。其中 _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 類的 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 = new int[]{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

發佈了15 篇原創文章 · 獲贊 8 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章