三種適配器:BaseAdapter、SimpleAdapter和ArrayAdapter
阿新 • • 發佈:2018-09-20
混合體 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