列表控制元件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);