1. 程式人生 > >列表控制元件ListView和介面卡Adapter

列表控制元件ListView和介面卡Adapter

學習筆記

一個ListView通常有兩個職責:

(1)將資料填充到佈局

(2)處理使用者的選擇點選等操作

一個ListView建立需要3個元素:

(1)ListView中每一列的View;(2)填入View的資料或圖片等;(3)連結資料與ListView的介面卡。

介面卡是一個連結資料和AdapterView(ListView就是一個典型的AdapterView)的橋樑,通過它能夠有效地實現資料與 AdapterView的分離設定,使AdapterView與資料的繫結更加簡便,修改更加方便。這也是Android完全遵循MVC設計模式的體現。

Android提供很多的Adapter,列出常用幾個:

ArrayAdapter(T)--------------------------------------------------------用來繫結一個數組,支援泛型操作

SimpleAdapter---------------------------------------------------------用來繫結在XML中定義的控制元件對應的資料

SimpleCursorAdapter-----------------------------------------------用來繫結遊標得到的資料

BaseAdapter-----------------------------------------------------------通用的基礎介面卡

1.ListView使用ArrayAdapter

用ArrayAdapter可以實現簡單的ListView的資料繫結。預設情況下,ArrayAdapter繫結每個物件的toString值到layout中預先定義的TextView空間上。ArrayAdapter的使用如下:

在佈局檔案中加入一個ListView控制元件:

<?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="vertical" 
    android:background="@drawable/hua">
<ListView
         android:id="@+id/lvcategory"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginLeft="20dp"
         android:layout_marginRight="20dp"
         >
      </ListView>    

</LinearLayout>

對應的activity:
package com.androidhomework.caipu;

import java.util.ArrayList;
import java.util.HashMap;

import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

/*
1.定義一個數組來存放ListView中item內容;
2.通過實現ArrayAdapter的建構函式來建立一個ArrayAdapter的物件
3.通過ListView的setAdapter()方法繫結ArrayAdapter.*/

public class CategoryActivity extends Activity{
	private static final String[] strs = new String[]{
			"家常菜","湯粥","麵食","甜點","小吃","海鮮"
	};
	private ListView lvcategory;
	
	@Override
	public void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		
		setContentView(R.layout.category_activity);
		
		lvcategory=(ListView)findViewById(R.id.lvcategory);//得到ListView物件的引用
		
		/*為ListView設定Adapter來繫結資料*/
		lvcategory.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,strs));
		
	}
 }
使用步驟:
1.定義一個數組來存放ListView中item內容;
2.通過實現ArrayAdapter的建構函式來建立一個ArrayAdapter的物件
3.通過ListView的setAdapter()方法繫結ArrayAdapter

其中,第2步,ArrayAdapter有多個建構函式,例子中是最常用的一種。   第一個引數為上下文,第二個引數為一個包含TextView,用來填充ListView的每一行的佈局資源ID,第三個引數為ListView的內容。其中,第二個引數可以自定義一個layout,但是這個layout必須要有TextView控制元件。:

a.通過指定android.R.layout.simple_list_item_checked,實現帶選擇框的ListView。需要用setChoiceMode()方法設定選擇為單選還是多選。

程式碼:lvcategory.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_checked,strs));

         lvcategory.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

b.通過指定android.R.layout.simple_list_item_multiple_choice這個資源實現帶CheckBox的ListView。同樣的,需要用setChoiceMode()方法來設定單選還是多選

程式碼:

         lvcategory.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice,strs));

         lvcategory.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

c.通過指定android.R.layout.simple_list_item_single_choice這個資源實現帶RadioButton的ListView。這裡並不是指定了單選,多選單選還需要通過setChoiceMode(方法來制定

lvcategory.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_single_choice,strs));

         lvcategory.setChoiceMode(ListView.CHOICE_MODE_SINGLE);