Android ListView詳解(一)

本文轉自:http://www.cnblogs.com/allin/archive/2010/05/11/1732200.html

如欲獲得更多更好的信息,請訪問原文地址,這裏僅作記載

在android開發中ListView是比較常用的組件,它以列表的形式展示具體內容,並且能夠根據數據的長度自適應顯示。抽空把對ListView的使用做了整理,並寫了個小例子,如下圖。

 列表的顯示需要三個元素:

1.ListVeiw 用來展示列表的View。

2.適配器 用來把數據映射到ListView上的中介。

3.數據    具體的將被映射的字符串,圖片,或者基本組件。

根據列表的適配器類型,列表分爲三種,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter

其中以ArrayAdapter最爲簡單,只能展示一行字。SimpleAdapter有最好的擴充性,可以自定義出各種效果。SimpleCursorAdapter可以認爲是SimpleAdapter對數據庫的簡單結合,可以方面的把數據庫的內容以列表的形式展示出來。

 我們從最簡單的ListView開始:

01 /**
02  * @author allin
03  *
04  */
05 public class MyListView extends Activity {
06
07     private ListView listView;
08     //private List<String> data = new ArrayList<String>();
09     @Override
10     public void onCreate(Bundle savedInstanceState){
11         super.onCreate(savedInstanceState);
12          
13         listView = new ListView(this);
14         listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,getData()));
15         setContentView(listView);
16     }
17      
18      
19      
20     private List<String> getData(){
21          
22         List<String> data = new ArrayList<String>();
23         data.add("測試數據1");
24         data.add("測試數據2");
25         data.add("測試數據3");
26         data.add("測試數據4");
27          
28         return data;
29     }
30 }

上面代碼使用了ArrayAdapter(Context context, int textViewResourceId, List<T> objects)來裝配數據,要裝配這些數據就需要一個連接ListView視圖對象和數組數據的適配器來兩者的適配工作,ArrayAdapter的構造需要三個參數,依次爲this,佈局文件(注意這裏的佈局文件描述的是列表的每一行的佈局,android.R.layout.simple_list_item_1是系統定義好的佈局文件只顯示一行文字,數據源(一個List集合)。同時用setAdapter()完成適配的最後工作。運行後的現實結構如下圖:

SimpleCursorAdapter

  sdk的解釋是這樣的:An easy adapter to map columns from a cursor to TextViews or ImageViews defined in an XML file. You can specify which columns you want, which views you want to display the columns, and the XML file that defines the appearance of these views。簡單的說就是方便把從遊標得到的數據進行列表顯示,並可以把指定的列映射到對應的TextView中。

  下面的程序是從電話簿中把聯繫人顯示到類表中。先在通訊錄中添加一個聯繫人作爲數據庫的數據。然後獲得一個指向數據庫的Cursor並且定義一個佈局文件(當然也可以使用系統自帶的)。

01 /**
02  * @author allin
03  *
04  */
05 public class MyListView2 extends Activity {
06
07     private ListView listView;
08     //private List<String> data = new ArrayList<String>();
09     @Override
10     public void onCreate(Bundle savedInstanceState){
11         super.onCreate(savedInstanceState);
12          
13         listView = new ListView(this);
14          
15         Cursor cursor = getContentResolver().query(People.CONTENT_URI, nullnullnullnull);
16         startManagingCursor(cursor);
17          
18         ListAdapter listAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_expandable_list_item_1,
19                 cursor,
20                 new String[]{People.NAME},
21                 new int[]{android.R.id.text1});
22          
23         listView.setAdapter(listAdapter);
24         setContentView(listView);
25     }
26      
27      
28 }

 Cursor cursor = getContentResolver().query(People.CONTENT_URI, null, null, null, null);先獲得一個指向系統通訊錄數據庫的Cursor對象獲得數據來源。

 startManagingCursor(cursor);我們將獲得的Cursor對象交由Activity管理,這樣Cursor的生命週期和Activity便能夠自動同步,省去自己手動管理Cursor。

 SimpleCursorAdapter 構造函數前面3個參數和ArrayAdapter是一樣的,最後兩個參數:一個包含數據庫的列的String型數組,一個包含佈局文件中對應組件id的int型數組。其作用是自動的將String型數組所表示的每一列數據映射到佈局文件對應id的組件上。上面的代碼,將NAME列的數據一次映射到佈局文件的id爲text1的組件上。

注意:需要在AndroidManifest.xml中如權限:<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>

運行後效果如下圖:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章