關於ListActivity的簡單體驗

android.app包裏的幾個類。首先是這個在平臺自的例子中被廣泛使用的ListActivity。這個類其實就是一個含有一個ListView組件的Activity類。也就是說,如果我們直接在一個普通的Activity中自己加一個ListView也是完全可以取代這個ListActivity的,只是它更方便而已,方便到什麼程度呢?來做個例子瞧瞧。

的確可以簡單到只需準備一個List對象並藉助Adapter就可以構造出一個列表。重載onListItemClick方法可以響應選擇事件,利用第一個參數可以訪問到這個ListView實例以得到選中的條目信息。這裏有一點要說明的,就是如果更簡單的話,其實連那個setContentView都可以不要了,Android也會自動幫我們構造出一個全屏的列表。但是本例中我們需要一個TextView來顯示選中的條目,所以我們需要一個layout.mainb描述一下這個列表窗口。

這裏需要注意的是那個ListView的ID,是系統自定義的android:list,不是我們隨便取的,否則系統會說找不到它想要的listview了。然後,在這個listview之外,我們又增加了一個TextView,用來顯示選中的條目。

再來說說這裏用到的ArrayAdapter,它的構造函數中第二個參數是一個資源ID,ArrayAdapter的API文檔中說是要求用一個包含TextView的layout文件,平臺用它來顯示每個選擇條目的樣式,這裏的取值是R.layout.list_row,所以,我們還有一個list_row.xml文件來描述這個佈局,相當簡單。

從ArrayAdapter上溯到BaseAdapter,發現還有幾個同源的Adapter也應該可以使用,象SimpleAdapter和CursorAdapter,還是做個例子來實驗一下吧。

先看看SimpleAdapter,說是simple卻不simple。

首先看看這個fillMaps方法,基本上就明白這個simpleAdapter是怎麼回事了,在有些場合它還是挺有用的,可以爲每個條目綁定一個值:

然後,在HelloTwoB中的onCreate函數中,修改代碼,有幾個不同:items的元素是HashMap實例,這是一點變化,然後構造函數除了要求items以外,還要求提供一個string[]來說明用hash表中的哪個字段顯示在列表中,而後是一個資源ID的數組。我的代碼是這樣的:


編譯跑一下可以看到結果了,是吧?只是顯示的文字不太對,再改一下:


這樣就好多了,其實一般情況下我們都是用ListView中的obtainItem取得當前選中的條目,然後轉成List中的對應類型來使用的。

上面的例子中只顯示name對應的值,其實你也可以試一下這樣:


看看是什麼效果。

再看看那個CursorAdapter吧,它的列表中元素要求是Cursor,這東西與DB有關,不過最簡單的DB就是通訊簿。先從Contacts.People入手吧,同樣修改代碼:


因爲單純的CursorAdapter是抽象類,所以我用的是它的子類SimpleCursorAdapter,很好理解,先用ContentResolver查詢通訊簿得到一個遊標,然後告訴SimpleCursorAdapter要用其中的People.NAME作爲顯示項來構造出一個adapter即可。

現在的onListItemClick也不一樣了,如下:

  
這裏同樣是先用obtainItem取到遊標,然後用從記錄中取出想要的字段顯示即可。在做這個例子時,因爲權限的問題我們還得修改一下AndroidManifest.xml文件,讓我們的應用可以訪問到通訊簿:

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/sharetop/archive/2007/12/28/1998725.aspx

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