1. 程式人生 > >學習使用ListView顯示列表

學習使用ListView顯示列表

ListView是android中顯示列表的控制元件,每一個ListView都可以包含很多個列表項,列表項的個數完全由資料來源所決定。每一個列表項特定格式的資料又是怎麼載入到檢視介面上的呢?這裡就需要引入資料介面卡。資料介面卡的作用就是把複雜的資料(比如,陣列/連結串列/資料庫/集合……)填充在指定的檢視介面上。(備註 :這裡“指定的資料介面“並不一定是ListView,android給我們提供了很多的控制元件)。

以下例例舉兩種介面卡:

1、ArrayAdapter(陣列介面卡):用於繫結格式單一的資料,資料來源可以是集合或陣列。
2、SimpleAdapter(簡單介面卡):用於繫結格式複雜的資料,資料來源只能是特定泛型的集合。


資料介面卡是連線資料來源與檢視介面的橋樑。

資料介面卡的實現過程非常簡單,只需要三步:新建介面卡------>新增資料來源到介面卡------>檢視載入介面卡

下面來分別看看ListView載入ArrayAdapter(陣列介面卡)和SimpleAdapter(簡單介面卡)的簡單案例:

首先是ArrayAdapter:

public class MainActivity extends Activity
{
    //宣告
private ListView listView;
    private ArrayAdapter<String>arrayAdapter;//陣列介面卡
private SimpleAdapter simpleAdapter;//簡單介面卡 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); listView= (ListView) findViewById(R.id.listView);//初始化ListView,繫結檢視 //1、新建資料介面卡 //ArrayAdapter(上下文,當前ListView載入的每一個列表項所對應的佈局檔案,資料來源
) //2、介面卡載入資料來源 String[]arrData={"測試資料1","測試資料2","測試資料3","測試資料4"};//資料來源 arrayAdapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,arrData); //android.R.layout.simple_list_item_1android自帶的佈局檔案 //檢視(ListView)載入介面卡 listView.setAdapter(arrayAdapter); } }
執行結果如下:


SimpleAdapter簡單案例:

public class MainActivity extends Activity
{
    //宣告
private ListView listView;
    private SimpleAdapter simpleAdapter;//簡單介面卡
private List<Map<String,Object>> dataList;//宣告資料來源的list
@Override
protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView= (ListView) findViewById(R.id.listView);//初始化ListView,繫結檢視
//1、新建資料介面卡
//SimpleAdapter()
        /*
        * context:上下文        * data:資料來源(List<? extends Map<string,?>> data)一個Map所組成的List集合
               每一個Map都會對應ListView列表中的一行
               每一個Map(鍵-值對)中的鍵必須包含所有在from中所指定的鍵        * resource:列表項的佈局檔案ID
        * from:Map中的鍵名        * to:繫結檢視中的ID,與from形成對應關係        */
        //2、介面卡載入資料來源
dataList=new ArrayList<Map<String,Object>>();
simpleAdapter=new SimpleAdapter(this,getDataList(),R.layout.item,new String[]{"pic","text"},new int[]{R.id.pic,R.id.text});
//android.R.layout.simple_list_item_1android自帶的佈局檔案
//R.layout.item:自定義列表項樣式(pic + text;
        //3、檢視(ListView)載入介面卡
listView.setAdapter(simpleAdapter);
}

    //獲取資料來源
private List<Map<String,Object>> getDataList()
    {
        for(int i=0;i<20;i++)
        {
            Map<String,Object>map=new HashMap<String,Object>();
map.put("pic",R.mipmap.ic_launcher);
map.put("text","測試資料"+i);
dataList.add(map);
}
        return dataList;
}
}
執行結果: