閱讀435 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Android 適配器教程(一)

最近在開發安卓的過程中發現ListView無疑是一個經常使用的組件,而提到ListView又不得不提一下適配器了,我打算用幾個實例,由淺入深的向大家仔細講解一下適配器的使用,雖然這算不上什麼高深的問題,我還是希望能給大家帶來一些收獲,我也是菜鳥一隻,寫的不好的或者有錯的地方還請大家幫忙指出。下麵進入正文:

首先讓我們來認識一下適配器:


什麼是適配器呢?顧名思義,就是把一些數據給弄得適當,適合以便於在View上顯示。適配器就像顯示器,把複雜的東西按人可以接受的方式來展現。也可以這樣來理解適配器,ListView通過適配器,理解我們要對ListView裏加入什麼內容,而我們在適配器裏@Override的方法,就是讓我們寫上我們要告訴這個ListView的一些基本內容。

可以說適配器就是數據和視圖之間的橋梁,學好適配器還是非常重要的。


  讓我們先從各個方麵理解適配器,然後看一些例子我想應該就可以徹底掌握它了!

 

  適配器的工作原理:

適配器是怎麼處理得到的數據,並把它顯示出來的呢?其實很簡單,說白了適配器它也是一個類,在類裏麵它實 現了父類的這幾個方法:

                        public int getCount()                               //得到數據的行數

                        public Object getItem(int position)         //根據position得到某一行的記錄

                       public long getItemId(intposition)           //的到某一條記錄的ID

還有最重要的:

publicView getView(intposition, View convertView, ViewGroup parent)  

              //相比於其它幾個方法這個方法是最重要的,它顯式的定義了適配器將要以什麼樣的方式去顯示我們所 填充的數據,在自定義的適配器裏麵我們通常會給它寫個布局文件。

這些在最後的一兩個例子裏會仔細講解,我們從簡單的看起:首先看看常用的適配器 


         我們常用的適配器一共有三個,當然不包含自定義的適配器:就是ArrayAdapter,SimpleAdapter,SimpleCursorAdapter 這三個,他們都是繼承於BaseAdapter 。

 

下麵我會逐一介紹,我們在具體應用中來繼續學習Adapter:

說道Adapter不得不說道ListView,或者說用到ListView不得不提到Adapter

        在android開發中ListView是比較常用的組件,它以列表的形式展示具體內容,並且能夠根據數據的長度自適應顯示。

而列表的顯示需要三個元素:

1.ListVeiw 用來展示列表的View。

2.適配器  用來把數據映射到ListView上的中介。

3.數據    具體的將被映射的字符串,圖片,或者基本組件。

 

根據列表的適配器類型,列表分為三種,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter

其中以ArrayAdapter最為簡單,隻能展示一行字。SimpleAdapter有最好的擴充性,可以自定義出各種效果。SimpleCursorAdapter可以認為是SimpleAdapter對數據庫的簡單結合,可以方麵的把數據庫的內容以列表的形式展示出來

 

我們從最簡單的ListView開始(ArrayAdapter):

 

我打算把這幾種適配器的例子放在一個app裏麵,然後上傳到我的資源,再分享鏈接給大家。所以我打算由MainActivity裏的Button來跳轉到各個例子,現在讓我們一步步的把這個Demo寫出來。


  項目開始啦!


(1)首先,新建一個app ,名字叫做 AdapterDemo ,先在activity_main.xml裏添加一個button,一會跳轉的時候使用。


(2)然後新建一個類ArrayAdapterDemo繼承自Activity作為我們第一個小例子的Activity,@Override 我們的onCreate方法

新建一個xml文件arrayadapterdemo.xml作為我們的布局文件,其中包含一個文本域和一個ListView,代碼如下:

arrayadapterdemo.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:andro
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="這是ArrayAdapter的一個例子" >
    </TextView>

    <ListView
        android:
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >
    </ListView>

</LinearLayout>

(3)然後回到ArrayAdapterDemo,定義一個Listview暫且叫做lv,並且lv=(ListView)findViewById(R.id.arrayadapterdemolistview);   ,setContentView()為剛才的xml布局,然後為lv設置一個適配器,這裏使用的是安卓原生的ArrayAdapter(Context context, inttextViewResourceId, List<T> objects)來裝配數據,要裝配這些數據就需要一個連接ListView視圖對象和數組數據的適配器 來兩者的適配工作。

        ArrayAdapter的構造需要三個參數,依次為:this,布局文件(注意這裏的布局文件描述的是列表的每一行的布局, android.R.layout.simple_list_item_1是係統定義好的布局文件隻顯示一行文字,數據源(一個List集合)。同時用setAdapter()完 成適配的最後工作。

一般寫一個getData()方法來作為最後一個參數,最終代碼如下:

package com.example.adapterdemo;

import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class ArrayAdapterDemo extends Activity {
	private ListView lv;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.arrayadapterdemo);
		lv=(ListView)findViewById(R.id.arrayadapterdemolistview);		
		lv.setAdapter(new ArrayAdapter<String>(this,
				android.R.layout.simple_expandable_list_item_1, getData()));
	}
	
	public List<String> getData(){
		
		List<String> data = new ArrayList<String>();
        data.add("測試數據1");
        data.add("測試數據2");
        data.add("測試數據3");
        data.add("測試數據4");
         
        return data;
		
		
	}

}

再在AndroidManifest.xml中注冊Activity並在主界麵中完成button監聽跳轉就可以了。

下麵是實現結果


教程一就先到此結束啦!一下子寫在一篇裏麵篇幅太長,大家也不喜歡看。

下次講解的是:

SimpleCursorAdapter在ListView中顯示手機聯係人列表。

請大家繼續關注!


源碼我會在最後一篇結束的時候發上來,我也是邊寫博客邊寫的代碼,我覺得這樣可能講的思路更清晰一些。

我也是學生,水平有限,還請多多指教!


最後更新:2017-04-03 05:39:33

  上一篇:go C語言內存泄露檢測--Memwatch
  下一篇:go 賬單支付寶代扣服務上線啦