1. 程式人生 > >三種適配器:BaseAdapter、SimpleAdapter和ArrayAdapter

三種適配器:BaseAdapter、SimpleAdapter和ArrayAdapter

混合體 ack xtend ont 模擬 tro 其中 emc 集合

一、寫在前面:   本次我們來講解一下Android應用中三個適配器:BaseAdapter、SimpleAdapter和ArrayAdapter。其中常見的是BaseAdapter,也是個人推薦使用的適配器。 二、深入了解:   1.什麽是適配器?    適配器:在Android中,顧名思義就是把數據變成符合界面風格的形式,並且通過ListView顯示出來。也就是說適配器是數據和界面之間的橋梁。    適配器在數據庫中的數據(後臺)和顯示頁面(前端)中充當一個轉換器的角色,數據庫中的數據(如數組,鏈表,數據庫,集合等)通過適配器變成類手機頁面能夠正常顯示的數據。可以看作是界面數據綁定的一種理解。假設把數據、適配器和ListView(頁面)比喻成一個MVC模式的話,那麽適配器(Adapter)在這中間就充當了Controller的角色。   2.為什麽對象設置數據源       一般是為ListView提供數據的轉換,當然GridView[網格視圖]、Spinner[下拉列表]、Gallery[畫廊]、ViewPage等都需要使用適配器來為其設置數據源。 三、代碼示例:   ArrayAdapter示範:     要求:使用數組適配器輸出相對應的數據到ListView中     1、首先、創建Android工程,後在布局文件中定義一個ListView,並且設置好相關屬性: <RelativeLayout 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" > <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="wrap_content"/> </RelativeLayout> 2、其次、在activity類中書寫代碼,具體請看代碼,並且代碼上有相關的註釋 package com.mqz.android_arrayadapter; import android.app.Activity; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.ListView; public class MainActivity extends Activity { private ListView listView; //定義ListView用來獲取到,布局文件中的ListView控件 private String[] city = {"廣州","深圳","北京","上海","香港","澳門","天津"} ; //定義一個數組,作為數據源 private ArrayAdapter<String> arrayAdapter; //定義一個數組適配器對象 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView)findViewById(R.id.listView); //獲取布局文件中的ListView控件對象 /* * Context context, 上下文對象 * int resource, items項顯示的布局樣式,一般是系統的布局文 android.R.layout.** (但是需要選擇和ListView相適合的布局文件否則運行報錯) * String[] objects 數組對象(數據源) * * */ //創建數組適配器對象,並且通過參數設置類item項的布局樣式和數據源 arrayAdapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1, city); //把數組適配器加載到ListView控件中 listView.setAdapter(arrayAdapter) } } SimpleAdapter示範:      要求:把後臺數據填充到頁面,其中包括需要填充的有TextView和ImageView,也就是名字和圖片顯示到頁面上。      1、首先,創建好android工程,並且在主布局文件中添加一個ListView控件 <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="horizontal" tools:context="com.mqz.android_simpleadapter.MainActivity" > <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent" ></ListView> </LinearLayout> 2、其次,在Activity類中書寫代碼,其間附有註釋,具體如下: package com.mqz.android_simpleadapter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { private ListView listView; //定義ListView對象,用來獲取布局文件中的ListView控件 private String[] name = {"小明","小華","小梁","小王","小林","小趙"}; //定義一個名字數組,用來為數據源提供姓名 private int[] images = {R.drawable.one,R.drawable.two,R.drawable.three,R.drawable.four,R.drawable.five,R.drawable.six};//定義一個 整形數組,用來為數據源中的頭像 private List<Map<String,Object>> list_map = new ArrayList<Map<String,Object>>(); //定義一個適配器對象 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.listView); //獲取布局文件中的ListView對象 //1.準備好數據源,循環為listView添加數據(數據源的準備工作,這裏是模擬從SQLite中查詢數據) for(int i=0;i<6;i++){ Map<String,Object> items = new HashMap<String, Object>(); //創建一個鍵值對的Map集合,用來存放名字和頭像 items.put("pic", images[i]); //放入頭像, 根據下標獲取數組 items.put("name", name[i]); //放入名字, 根據下標獲取數組 list_map.add(items); //把這個存放好數據的Map集合放入到list中,這就完成類數據源的準備工作 } //2、創建適配器(可以使用外部類的方式、內部類方式等均可) SimpleAdapter simpleAdapter = new SimpleAdapter( MainActivity.this,/*傳入一個上下文作為參數*/ list_map, /*傳入相對應的數據源,這個數據源不僅僅是數據而且還是和界面相耦合的混合體。*/ R.layout.list_items, /*設置具體某個items的布局,需要是新的布局,而不是ListView控件的布局*/ new String[]{"pic","name"}, /*傳入上面定義的鍵值對的鍵名稱,會自動根據傳入的鍵找到對應的值*/ new int[]{R.id.items_imageView1,R.id.items_textView1});/*傳入items布局文件中需要指定傳入的控件,這裏直接上id即可*/ //3、為listView加入適配器 listView.setAdapter(simpleAdapter); }); } } 3、創建 item 項的 layout 布局文件: 下面是 item 項的布局文件: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <ImageView android:id="@+id/items_imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/items_textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="52dp"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/items_textView2" android:text="hello android!" android:layout_alignParentRight="true" /> </RelativeLayout>

三種適配器:BaseAdapter、SimpleAdapter和ArrayAdapter