android檢視元件之ListView
阿新 • • 發佈:2019-02-04
ListView是android系統中比較常用的檢視元件,它的構建主要包含兩方面資訊:分別是UI元件的繪製和資料來源的設定。UI元件和資料來源之間通過介面卡建立關聯。這裡的介面卡充當媒人的角色,在為UI元件和資料來源介紹親事之前,媒人需要對雙方有所瞭解,瞭解的內容包括:ListItem的佈局資訊和資料來源的實體資訊。
常用的介面卡有兩種,分別是ArrayAdapter和SimpleAdapter
ArrayAdapter的應用場景:
ListItem顯示單一,只需顯示一條文字資訊即可
示例圖:
針對這種顯示方式,android系統為我們提供了預設的ListItem佈局
res\layout\simple_list_item_1.xml
如果我們想自定義ListItem佈局以便ListView的顯示更加豐富,那麼我們經常會用到另外一種介面卡SimpieAdapter。
SimpieAdapter的資料來源呈如下結構:List<Map<String,Object>>,List集合中不再是實體物件,而是一個Map,Map.Entry會和ListItem進行繫結,而Map的Value值會對映到ListItem的顯示內容中去。
假設,我們構造瞭如下ListItem佈局:
顯示效果:
ListView元件可監聽如下事件:
選擇:setOnItemSelectedListener
單擊:setOnItemClickListener
長點選事件:setOnItemLongClickListener
長點選顯示contextMenu:setOnCreateContextMenuListener
常用的介面卡有兩種,分別是ArrayAdapter和SimpleAdapter
ArrayAdapter的應用場景:
ListItem顯示單一,只需顯示一條文字資訊即可
示例圖:
針對這種顯示方式,android系統為我們提供了預設的ListItem佈局
res\layout\simple_list_item_1.xml
該佈局定義了一個TextView用於顯示ListItem的文字內容,構造ArrayAdapter之前,只需將該TextView的id和佈局檔案id作為引數傳遞至ArrayAdapter的構造引數中即可。<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceListItemSmall" android:gravity="center_vertical" android:paddingLeft="?android:attr/listPreferredItemPaddingLeft" android:paddingRight="?android:attr/listPreferredItemPaddingRight" android:minHeight="?android:attr/listPreferredItemHeightSmall"/>
new ArrayAdapter<Word>(context,android.R.layout.simple_list_item_1,android.R.id.text1,List<?> dataSource);
第四個引數表資料來源資訊,TextView要顯示的文字內容即為List集合中實體元素的toString()值。如果我們想自定義ListItem佈局以便ListView的顯示更加豐富,那麼我們經常會用到另外一種介面卡SimpieAdapter。
SimpieAdapter的資料來源呈如下結構:List<Map<String,Object>>,List集合中不再是實體物件,而是一個Map,Map.Entry會和ListItem進行繫結,而Map的Value值會對映到ListItem的顯示內容中去。
假設,我們構造瞭如下ListItem佈局:
又提供瞭如下資料來源資訊:<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <ImageView android:id="@+id/fileItem_image" android:layout_width="32dp" android:layout_height="32dp" android:layout_margin="4dp" android:contentDescription="@string/img_desc"/> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/fileItem_name" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@+id/fileItem_path" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout> </LinearLayout>
便可通過如下構造器構建SimpleAdapter物件List<Map<String,Object>> fileList=new ArrayList<Map<String,Object>>(); Map<String,Object> fileInfo=new HashMap<String,Object>(); fileInfo.put("img",R.drawable.img); fileInfo.put("name","fileName"); fileInfo.put("path","filePath"); fileList.add(fileInfo);
new SimpleAdapter(context, fileList, R.layout.filelist_item, new String[]{"img", "name", "path"},
new int[]{R.id.fileItem_image, R.id.fileItem_name, R.id.fileItem_path});
由構造器可以看出,img、name和path分別和fileItem_image、fileItem_name和fileItem_path三個元件形成對映,它們的value值將會顯示到3個元件的文字內容中去。顯示效果:
ListView元件可監聽如下事件:
選擇:setOnItemSelectedListener
單擊:setOnItemClickListener
長點選事件:setOnItemLongClickListener
長點選顯示contextMenu:setOnCreateContextMenuListener