http://blog.csdn.net/litianpenghaha/article/details/23270881
AdapterView組件是一組重要的組件,AdapterView本身是一個抽象基類,它派生的子類在用法上十分相似,知識顯示界面有些不同,
下面是AdapterView及其子類的繼承關系類圖:

從AdapterView派生出的三個子類:AdsListView、AdsSpinner、AdapterViewAnimator,這3個子類依然是抽象的,實際運用時需要它們的子類。
1、ListView(列表視圖)和ListActivity:
ListView應用十分廣泛,它以垂直列表的形式顯示所有的列表項,
創建ListView的兩種方法:
(1)直接使用ListView創建;
(2)讓Activity繼承ListActivity,就是該Activity顯示的組件為ListView
注意:ListView、GridView、Spinner、Gallery等AdapterView只是容器,而Adapter負責提供每個“列表項”組件,AdapterView負責采用合適的方式顯示這些列表項。
AbsListView的XML屬性如下:
ListView提供了如下的XML屬性:
如果想對ListView的外觀、行為進行定制,就要把ListView作為AdapterView使用,通過Adapter控制每個列表的外觀和行為。
2、Adapter接口及其實現類:
下面是其關系圖:
Adapter接口派生出了ListAdapter和SpinnerAdapter兩個子接口,可以看出,幾乎所有的Adapter都繼承BaseAdapter。
Adapter常用的實現類如下:
通過ArrayAdapter實現的Adapter很簡單,其功能也比較有限,而且它的每個列表都只能是TextView,如果要實現復雜的功能,則可以使用SimpleAdapter。
下面給出SimpleAdapter的一個實例:
activity_simple.xml如下:
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:paddingBottom="@dimen/activity_vertical_margin"
- android:paddingLeft="@dimen/activity_horizontal_margin"
- android:paddingRight="@dimen/activity_horizontal_margin"
- android:paddingTop="@dimen/activity_vertical_margin"
- tools:context=".SimpleActivity" >
- <ListView
- android:id="@+id/mylist"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" >
- </ListView>
- </LinearLayout>
simple_item.xml如下:
- <?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="wrap_content"
- android:orientation="horizontal" >
- <ImageView
- android:id="@+id/header"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:paddingLeft="10dp" >
- </ImageView>
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical" >
- <TextView
- android:id="@+id/name"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:paddingLeft="10dp"
- android:textColor="#f0f"
- android:textSize="20sp" >
- </TextView>
- <TextView
- android:id="@+id/desc"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:paddingLeft="10dp"
- android:textSize="14sp" >
- </TextView>
- </LinearLayout>
- </LinearLayout>
- package com.simpleadapter;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import android.os.Bundle;
- import android.app.Activity;
- import android.view.Menu;
- import android.view.View;
- import android.widget.AdapterView;
- import android.widget.AdapterView.OnItemClickListener;
- import android.widget.AdapterView.OnItemSelectedListener;
- import android.widget.ListView;
- import android.widget.SimpleAdapter;
- public class SimpleActivity extends Activity {
- private String[] names = { "虎頭", "弄玉", "李清照", "李白" };
- private String[] descs = { "可愛的孩子", "一個擅長音樂的女孩", "一個擅長寫詞的女性", "一個偉大的浪漫主義詩人" };
- private int[] imageIds = new int[] { R.drawable.tiger, R.drawable.nongyu,
- R.drawable.qingzhao, R.drawable.libai };
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_simple);
- List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();
- for (int i = 0; i < names.length; ++i) {
- Map<String, Object> listItem = new HashMap<String, Object>();
- listItem.put("header", imageIds[i]);
- listItem.put("name", names[i]);
- listItem.put("desc", descs[i]);
- listItems.add(listItem);
- }
- SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems,
- R.layout.simple_item,
- new String[] { "name", "header", "desc" }, new int[] {
- R.id.name, R.id.header, R.id.desc });
- ListView list = (ListView) findViewById(R.id.mylist);
- list.setAdapter(simpleAdapter);
- // ListView的列表項的單擊事件綁定事件監聽器
- list.setOnItemClickListener(new OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View view,
- int position, long id) {
- System.out.println(names[position] + "被單擊了");
- }
- });
- // 為ListView的列表項的選中事件綁定事件監聽器
- list.setOnItemSelectedListener(new OnItemSelectedListener() {
- @Override
- public void onItemSelected(AdapterView<?> parent, View view,
- int position, long id) {
- System.out.println(names[position] + "被選中了");
- }
- @Override
- public void onNothingSelected(AdapterView<?> arg0) {
- }
- });
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- // Inflate the menu; this adds items to the action bar if it is present.
- getMenuInflater().inflate(R.menu.simple, menu);
- return true;
- }
- }
點擊或者選中按鈕時在LogCat上面會有顯示。
3、AutoCompleteTextView(自動完成文本框):
AutoCompleteTextView從EditText派生而來,實際上也是一個文本編輯框,但是它比普通的編輯框多一個功能:當用戶輸入一定的字符之后,自動完成文本框會顯示一個下拉菜單,供用戶從中選擇,當用戶選擇某個菜單項之后,AutoCompleteTextView會按照用戶的選擇自動填寫該文本框。
AutoCompleteTextView除了支持EditText的屬性方法之外,還支持如下的XML屬性以及方法:
AutoCompleteTextView派生一個子類:MultiAutoCompleteTextView,該子類的功能與AutoCompleteTextView基本相似,只是MultiAutoCompleteTextView比AutoCompleteTextView允許輸入多個提示項,以分隔符分隔。
4、GridView(網格視圖):
GridView用於在界面上按行列分布的方式來顯示多個組件,GridView和ListView具有相同的父類:AbsListView,因此GridView和ListView很相似,但是ListView只顯示一列,GridView可以顯示多列
GridView常用的XML屬性:
注意:使用GridView一般都會設置numColumns大於1,否則該默認值為1,則意味着該GridView只有一列,就相當於ListView了。
上表中android:stretchMode屬性支持如下屬性值:
5、ExpandableListView(可展開的列表組件):
ExpandableListView是ListView的子類,它在普通ListView的基礎上進行擴展,把應用中的列表項分為幾組,每組又可以包含多個列表項,ExpandableListView與普通的ListView用法十分相似,只是
ExpandableListView所顯示的列表應該由ExpandableListAdapter提供,下面是其繼承關系圖:
實現ExpandableListAdapter的3種常用方式:
下面顯示ExpandableListView支持的XML屬性:
6、Spinner:
Spinner組件就是一個列表選擇框,這里相當於彈出一個菜單供用戶選擇。Spinner繼承AbsSpinner,AbsSpinner繼承AdapterView,因此Spinner表現出ApdaterView的特征,下面顯示了Spinner的XML屬性:
注意:上面的android:entries屬性並不是Spinner定義的,而是在AbsSpinner中定義的,
7、Gallery(畫廊視圖):
Gallery繼承AbsSpinner,且Gallery顯示的也是一個列表框,但是Gallery顯示的是一個水平的列表框,Spinner顯示的是一個垂直的列表框。它們之間的區別還有:Spinner作用是供用戶選擇,而Gallery則允許用戶通過拖動來查看上一個、下一個列表項。
Gallery提供的XML屬性:
注意:android已經不再推薦使用Gallery組件,而是推薦使用其他的水平滾動組件HorizontalScrollView和ViewPager來代替Gallery。
8、AdapterViewFipper:
AdapterViewFipper繼承AdapterViewAnimator,下面是其支持的XML屬性:
它額外指定的屬性:
9、StackView:
StackView也是AdapterViewAnimator的子類,StackView以“堆疊”的方式來顯示多個列表項,
StackView提供的兩種控制方式:
