Android中的適配器(Adapter)


一、Android中的適配器(Adapter)是什么?

Android中的適配器(Adapter)是指能夠把數據映射(或說是填充)到用戶界面上的Android對象。

二、Android中的適配器(Adapter)有什么用?

Android中適配器(Adapter)的作用:能夠把所攜帶的數據映射(或說是填充)到用戶界面上。

三、Android中的適配器(Adapter)咋樣用?

1、Android中的適配器(Adapter)繼承關系

 

由上圖可知:以上是Android中與Adapter(適配器)有關的所有接口、類繼承的完整層級圖。比較常用的有這幾種:ArrayAdapter(數組適配器)、SimpleAdapte (簡單適配器)、SimpleCursorAdapter(簡單游標適配器)、BaseAdapter(抽象適配器)等。

2、Android中的ArrayAdapter(數組適配器)

(1)、ArrayAdapter(數組適配器)的生成

ArrayAdapter<Strings>  adapter = new ArrayAdapter<>(this,android.R.layout.simple_expandable_list_item_1,datas);

分析以上程序代碼可知:第一個參數this:表示上下文語境。第二個參數android.R.layout.simple_expandable_list_item_1:表示每一個item(列表項)的樣式,可以使用系統提供的(如:simple_list_item1:單獨一行文本框,simple_list_item2:兩個文本框,simple_list_item_checked:每項都是由一個已選中的列表,simple_list_item_multiple_choice:都帶有一個復選框,simple_list_item_single_choice:都帶有一個單選框。),也可以自定義一個TextView(文本框)。第三個參數datas:表示數據源。

(2)、ArrayAdapter(數組適配器)一般把所攜帶的數據通過調用setAdapter()方法來映射到ListView(列表視圖)上。如下邏輯編程文件MainActivity.java所示。

package com.qiang.array_adapter;
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來獲取布局文件中的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控件 //創建數組適配器對象,並且通過參數設置類item(列表項)的布局樣式和數據源 。 arrayAdapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_ 1, city); //把數組適配器所攜帶的數據通過調用setAdapter()方法映射到ListView(列表視圖)上 listview.setAdapter(arrayAdapter); }
}

(3)、第一種用戶界面布局文件activity_main.xml如下所示

<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"
android:orientation="vertical" > <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="wrap_content">
</ListView>
</RelativeLayout>

 (4)、第二種用戶界面布局文件activity_main.xml如下所示

<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" 
android:orientation="vertical">
<ListView android:id="@+id/listView"
android:layout_width
="match_parent"
android:layout_height
="wrap_content"
android:entries
="@array/myArray">
</ListView>
</RelativeLayout>

 第二種用戶界面布局文件activity_main.xml需要搭載一個數組資源文件arrays.xml才可使用,如下所示。

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string-array name="myArray">
    <item>廣州</item>
    <item>深圳</item>
    <item>北京</item>
    <item>上海</item>
    <item>香港</item>
    <item>澳門</item>
  </string-array>
</resources>

 (5)、字符串資源文件strings.xml如下所示

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string name="app_name">ArrayAdapterDemo</string>
  <string name="name">array_adapter</string>
</resources>

(6)、R.java文件如下所示

/* AUTO-GENERATED FILE.  DO NOT MODIFY.
* This class was automatically generated by the * aapt tool from the resource data it found. It * should not be modified by hand.
*/ package com.qiang.array_adapter; public final class R
{
public static final class array
{
public static final int myArray=0x7f040000; } public static final class attr
{ }
public static final class drawable
{
public static final int ic_launcher=0x7f020000; } public static final class id
{
public static final int listView=0x7f070000; } public static final class layout
{
public static final int activity_main=0x7f030000; } public static final class string
{
public static final int app_name=0x7f050000; public static final int name=0x7f050001; } public static final class style
{
public static final int AppTheme=0x7f060000; } }

 (7)、功能清單配置文件AndroidManifest.xml如下所示

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.qiang.array_adapter"
  android:versionCode="1"
  android:versionName="1.0" >
  <uses-sdk
    android:minSdkVersion="10"
    android:targetSdkVersion="10" />
    <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
    <activity
      android:name="com.qiang.array_adapter.MainActivity"
      android:label="@string/app_name" >
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
   </application>
</manifest>

 3、Android中的SimpleAdapter(簡單適配器)

(1)、SimpleAdapter(簡單適配器)的生成

SimpleAdapter simpleadapter = new SimpleAdapter(MainActivity.this,list_map,R.layout.list_item ,new String[]{"image","theme","content"} ,new int[]{R.id.image0,R.id.text0,R.id.text1})

分析以上程序代碼可知:第一個參數this:表示上下文語境。第二個參數list:含有map的一個集合的數據源,第三個參數android.R.layout.list_item:表示ListView視圖中每個item(列表項)控件的布局樣式,不是布局文件activity_main.xml中ListView視圖的樣式。第四個參數new String[]{}數組:該數組里面的每一項表示每個控件的內容,且要與第二個參數中存入map集合的key值一樣,要一一對應。第五個參數new int[]{}數組:該數組里面的每一項表示第三個參數中item(列表項)里面每個控件樣式的id。

(2)、SimpleAdapter(簡單適配器)一般把所攜帶的數據與圖片通過調用setAdapter()方法來映射到ListView(列表視圖)上。如下邏輯編程文件MainActivity.java所示。

package com.qiang.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來獲取布局文件中的ListView控件
   private String[] theme = {"廣州","深圳","北京","上海","香港","澳門"};//定義一個數組,用來作為數據源。
   private String[] content ={"廣州,你好!","深圳,你好!","北京,你好!", "上海,你好!","香港,你好!","澳門,你好!"};
   private int[] image = {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);//獲取布局文件activity_main.xml中的ListView控件
    //准備好數據源,為listView循環添加數據。
    for(int i=0;i<theme.length;i++)
  {
     Map<String,Object> items = new HashMap<String, Object>();//創建一個鍵值對的map集合,用來存放地方名字和內容和圖像。
     items.put("pictures", image[i]);//把圖像放入map集合中
     items.put("themes", theme[i]); //把地方名放入map集合中         
     items.put("contents",content[i]);//把內容放入map集合中
     list_map.add(items);//把這個存放好數據的map集合放入到list中。  
    }   
     //創建簡單適配器對象(可以使用外部類的方式、內部類方式等均可)
     SimpleAdapter simpleadapter = new SimpleAdapter(MainActivity.this,/*傳入一個上下文作為參數*/list_map,/*把數據源傳到數組列表中*/R.layout.list_item, /*調用布局文件list_item.xml(含有多個列表項的布局)*/new String[]{"pictures","themes",“contents”}, /*傳入圖像數組、名稱數組和內容數組,程序會自動根據傳入的這三種數組來互相匹配。*/new int[]{R.id.images,R.id.text1,R.id.text2});/*調用布局文件list_item.xml(含有多個列表項的布局)中的控件*/
     //把簡單適配器所攜帶的數據與圖像通過調用setAdapter()方法映射到ListView(列表視圖)上
     listView.setAdapter(simpleadapter);
    }
  }

(3)、ListView視圖的用戶界面布局文件activity_main.xml如下所示 

<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"
  android:orientation="vertical" >
  <ListView
    android:id="@+id/listView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
  </ListView>
</RelativeLayout>

 (4)、ListView視圖中每個item(列表項)控件的用戶界面布局文件list_item.xml如下所示

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
android:layout_width
="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <ImageView android:id="@+id/images" android:layout_width="100dp" android:layout_height="100dp" android:src="@drawable/ic_launcher" android:layout_margin="5dp"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/text1" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="30sp" android:layout_marginTop="10dp"/> <TextView android:id="@+id/text2" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="30sp" android:layout_marginTop="10dp"/> </LinearLayout> </LinearLayout>

(5)、字符串資源文件strings.xml如下所示 

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string name="app_name">SimpleAdapterDemo</string>
  <string name="name">simple_adapter</string>
</resources>

 (6)、R.java文件如下所示

/* AUTO-GENERATED FILE.  DO NOT MODIFY.
 *
 * This class was automatically generated by the
 * aapt tool from the resource data it found.  It
 * should not be modified by hand.
 */
package com.mycompany.myapp;
  public final class R 
{
public static final class array
{
public static final int myArray=0x7f040000; } public static final class attr
{ }
public static final class drawable
{
public static final int ic_launcher=0x7f020000; } public static final class id
{
public static final int images=0x7f070001; public static final int listView=0x7f070000; public static final int text1=0x7f070002; public static final int text2=0x7f070003; } public static final class layout
{
public static final int activity_main=0x7f030000; public static final int list_item=0x7f030001; public static final int main=0x7f030002; } public static final class string
{
public static final int app_name=0x7f050000; public static final int hello_world=0x7f050001; } public static final class style
{
public static final int AppTheme=0x7f060000; } }

(7)、功能清單配置文件AndroidManifest.xml如下所示

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.qiang.simple_adapter"
  android:versionCode="1"
  android:versionName="1.0" >
  <uses-sdk
    android:minSdkVersion="10"
    android:targetSdkVersion="10" />
    <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
    <activity
      android:name="com.qiang.simple_adapter.MainActivity"
      android:label="@string/app_name" >
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
   </application>
</manifest>

4、Android中的SimpleCursorAdapter(簡單游標適配器)

 

5、Android中的BaseAdapter(抽象適配器)

(1)、BaseAdapter(簡單適配器)的生成

 

(2)、邏輯編程文件MyAdapter.java如下所示 

package com.qiang.base_adapter;
/***  
  public class User
{
   private String name;
   private int pic;
   public String getName()
 {
 return name;
   }
   public void setName(String name)
 {
 this.name=name;
 }
   public int getPic()
 {
    return pic;
   }
   public void setPic(int pic)
 {
    this.pic=pic;
   }
  }***/
import android.content.Context;
import android.text.Layout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.*;
  public class MyAdapter extends BaseAdapter 
{
   private List<ItemBean> Datas;
   private LayoutInflater Inflater;
   private Context mContext;
   public MyAdapter(List<ItemBean> datas, Context mContext)
 {
    Datas = datas;
    Inflater =LayoutInflater.from(mContext);
   }
   /*
    * 返回item(列表項)的個數
    * @return
    */
   @Override
   public int getCount()//獲取列表中每一項的個數 
 {
    return Datas.size();
   }
   /*
    * 返回每一個item(列表項)
    * @param i
    * @return
    */
    @Override
    public Object getItem(int i)//根據索引獲取列表中每一項的數據 
  {
     return Datas.get(i);
    }
   /*
    * 返回每一個item(列表項)的id
    * @param i
    * @return
    */
    @Override
    public long getItemId(int i)//獲取列表中每一項的id 
  {
     return i;
    }
   /*
    * 暫時不做優化處理,后面會專門整理BaseAdapter的優化。
    * @param i
    * @param view
    * @param viewGroups
    * @return
    */
    @Override
    public View getView(int i, View convertView, ViewGroup parent)//獲取列表中每一項的顯示內容
  {
     View view = Inflater.inflate(R.layout.item,null);
     ImageView imageView = (ImageView) view.findViewById(R.id.images);
     TextView textView1 = (TextView) view.findViewById(R.id.text1);
     TextView textView2 = (TextView) view.findViewById(R.id.text2);
     imageView.setImageResource(Datas.get(i).ItemImageId);
     textView1.setText(Datas.get(i).ItemTheme);
     textView2.setText(Datas.get(i).ItemContent);
     return view;
    }
   }

(3)、BaseAdapter(簡單適配器)一般把所攜帶的數據與圖片通過調用setAdapter()方法來映射到ListView(列表視圖)上。如下邏輯編程文件MainActivity.java所示。

package com.qiang.base_adapter;
import android.app.*;
import android.os.*;
import android.widget.*;
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;*/
import android.view.LayoutInflater;
import android.view.ViewGroup;
//import com.mycompany.myapp.User;
  public class MainActivity extends Activity 
{
   /*@Override
   protected void onCreate(Bundle savedInstanceState)
 {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    //要顯示的數據
    String[] strs = {"語文","數學","英語","物理","化學"};
    //創建ArrayAdapter
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,strs);
    //獲取ListView對象,通過調用setAdapter方法為ListView設置Adapter設置適配器
    ListView listview = (ListView) findViewById(R.id.listView);
    listview.setAdapter(adapter);*/
   /**
   private ListView listView;//定義ListView變量listview來獲取布局文件中的ListView控件
   private String[] theme = {"廣州","深圳","北京","上海","香港","澳門"};//定義一個數組,用來作為數據源。
   private String[] content ={"廣州,你好!","深圳,你好!","北京,你好!", "上海,你好!","香港,你好!","澳門,你好!"};
   private int[] images = {R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher};//定義一個整形數組,用來作為數據源中的圖像。
   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); //獲取布局文件activity_main.xml中的ListView控件布局樣式
    //准備好數據源,為listView循環添加數據。
    for(int i=0;i<theme.length;i++)
  {
     Map<String,Object> items = new HashMap<String, Object>();//創建一個鍵值對的map集合,用來存放地方名字和內容和圖像
     items.put("pictures", images[i]);//放入圖像, 根據下標獲取數組。
     items.put("themes", theme[i]); //放入地方名, 根據下標獲取數組。         
     items.put("contents",content[i]);//放入內容,根據下標獲取數組。
     list_map.add(items);//把這個存放好數據的map集合放入到list中。  
    }**/
    //創建簡單適配器對象(可以使用外部類的方式、內部類方式等均可)
    //SimpleAdapter simpleadapter = new SimpleAdapter(MainActivity.this,/*傳入一個上下文作為參數*/list_map,/*傳入數據源到數組列表中*/R.layout.list_item, /**設置具體某個items(列表項)的樣式,而不是布局文件中ListView控件的樣式。*/new String[]{"pictures","themes","contents"}, /*傳入上面定義的鍵值對的鍵名稱,程序會自動根據傳入的鍵找到對應的值。*/new int[]{R.id.image,R.id.text1,R.id.text2});/*傳入items(列表項)布局文件中需要指定傳入的控件*/
    //把簡單適配器所攜帶的數據與圖像通過調用setAdapter()方法映射到ListView(列表視圖)上
    //listView.setAdapter(simpleadapter);
    /***
    private ListView listView;  //定義ListView控件,用來獲取布局文件中的ListView
    private List<User> list;  //存放數據源你的集合,泛型設置為User類型。
    private int[] images = {R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher};//定義數組,保存圖片Id用用來設置頭像 
    private String[] names = {"廣州","深圳","北京","上海","香港","澳門"};//定義字符串數組,用來保存用戶的名字
    @Override
    protected void onCreate(Bundle savedInstanceState)
  {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
     listView = (ListView) findViewById(R.id.listView);//獲取ListView控件
     //1.加載數據源,在這里只是模擬一個從數據庫中查詢數據的操作。(模擬數據庫查詢數據的操作)
     list = new ArrayList<User>();
     for(int i=0;i<6;i++)
   {
      User u = new User();
      u.setName(names[i]);//設置名字,根據定義的數組設置
      u.setPic(images[i]);//定義頭像,在實體類中需要定義為整形,因為在R文件中所有的資源文件都是整形的。
      list.add(u);//添加對象到list集合中,數據源准備成功。
     }
     //2.創建BaseAdapter適配器,並且配置好相對應的布局文件(本次使用內部類的方式)
     //3.把適配器加載到ListView中
     MyBaseAdapter adapter = new MyBaseAdapter();//創建這個成員內部類的對象
     listView.setAdapter(adapter);//為數據源設置好適配器    
    }
    class MyBaseAdapter extends BaseAdapter
  {
     //獲取當前items項的大小,也可以看成是數據源的大小
     @Override
     public int getCount() 
   {
      return list.size();
     }
     //根據item的下標獲取到View對象
     @Override
     public Object getItem(int position)
   {
      // TODO Auto-generated method stub
      return null;
     }
      //獲取到items的id
     @Override
     public long getItemId(int position) 
   {
      // TODO Auto-generated method stub
      return 0;
     }
     //根據傳入item的下標,獲取到view對象
     /*
      * int position,表示item所在listView中的下標,也是在數據源中下標所對應的數據 
      * View convertView,緩存機制,當一些item項滑出屏幕的時候,會創建新的View對象,這樣會使得內存資源占據,
      * 所以使用convertView判斷是否為空,如果為空的說明item沒有滑出,需要創建新的view對象
      * 如果不為空,說明已經滑出類屏幕所以使用convertView ,view = convertView,
      *可以把convert 理解為滑出的view對象         
      * ViewGroup parent視圖組對象,即 表示當前繪制的items項所屬的ListView對象。
      * */
      /***
     @Override
     public View getView(int position, View convertView, ViewGroup parent) 
   {
      View view = null;
      //獲取填充器對象,這個對象可以幫助我們繪制出items項,獲取方式有多種:
      //LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);    
      LayoutInflater inflater = MainActivity.this.getLayoutInflater();
      /*
      調用打氣筒中的 inflate(int resource, ViewGroup root) 方法
      第一個參數是一個布局文件對象,通過這個布局文件,inflater會在這布局文件中繪制items項
      第二個參數是需不需要將第一個參數中的那個布局文件嵌入到另外一個布局文件中。如果要寫上布局文件的id,如果不需要直接寫null
      */
      /***
      view = inflater.inflate(R.layout.items_layout, null); 
      User u = list.get(position);//通過回調這個方法傳過來的position參數獲取到指定數據源中的對象
      //找到布局文件中的控件
      ImageView pic = (ImageView) view.findViewById(R.id.items_pic);
      TextView name = (TextView) view.findViewById(R.id.items_text1);
      pic.setImageResource(u.getPic());//從數據源中獲取頭像 設置到布局文件的ImageView控件中。
      name.setText(u.getName());//從數據源中獲取名字 設置到布局文件的TextView控件中。
      return view;
     }
    }***/
   private List<ItemBean> lists;
   private MyAdapter adapter;
   private ListView listView;
   @Override
   protected void onCreate(Bundle savedInstanceState)
 {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    listView = (ListView) findViewById(R.id.listView);
    lists = new ArrayList<>();
    lists.add(new ItemBean(R.drawable.ic_launcher,"廣州","你好!"));
    lists.add(new ItemBean(R.drawable.ic_launcher,"深圳","你好!"));
    lists.add(new ItemBean(R.drawable.ic_launcher,"北京","你好!"));
    lists.add(new ItemBean(R.drawable.ic_launcher,"上海","你好!"));
    lists.add(new ItemBean(R.drawable.ic_launcher,"香港","你好!"));
    lists.add(new ItemBean(R.drawable.ic_launcher,"澳門","你好!"));
    adapter = new MyAdapter(lists,MainActivity.this);
    listView.setAdapter(adapter);
   }
  }

(4)、邏輯編程文件ItemBean.java如下所示

package com.qiang.base_adapter;
  public class ItemBean
{
   public int ItemImageId;
   public String ItemTheme;
   public String ItemContent;
   public ItemBean(int itemImageid,String itemTheme,String itemContent)
 {
    ItemImageId=itemImageid;
    ItemTheme=itemTheme;
    ItemContent=itemContent;
   }
 }

(5)、ListView視圖的用戶界面布局文件activity_main.xml如下所示 

<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"
  android:orientation="vertical" >
  <ListView
    android:id="@+id/listView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
  </ListView>
</RelativeLayout>

(6)、ListView視圖中每個item(列表項)控件的用戶界面布局文件item.xml如下所示

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:orientation="horizontal">
  <ImageView
    android:id="@+id/images"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:src="@drawable/ic_launcher"
    android:layout_margin="5dp"/>
   <LinearLayout
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical">
     <TextView
       android:id="@+id/text1"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:textSize="30sp"
       android:layout_marginTop="10dp"/>
     <TextView
       android:id="@+id/text2"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:textSize="30sp"
       android:layout_marginTop="10dp"/>
   </LinearLayout>
</LinearLayout>

(7)、字符串資源文件strings.xml如下所示 

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string name="app_name">BaseAdapterDemo</string>
  <string name="name">base_adapter</string>
</resources>

(8)、R.java文件如下所示 

/* AUTO-GENERATED FILE.  DO NOT MODIFY.
 *
 * This class was automatically generated by the
 * aapt tool from the resource data it found.  It
 * should not be modified by hand.
 */
package com.qiang.base_adapter;
  public final class R 
{
public static final class array
{
public static final int myArray=0x7f040000; } public static final class attr
{ }
public static final class drawable
{
public static final int ic_launcher=0x7f020000; } public static final class id
{
public static final int image=0x7f070007; public static final int images=0x7f070001; public static final int items_pic=0x7f070004; public static final int items_text1=0x7f070005; public static final int items_text2=0x7f070006; public static final int listView=0x7f070000; public static final int text1=0x7f070002; public static final int text2=0x7f070003; } public static final class layout
{
public static final int activity_main=0x7f030000; public static final int item=0x7f030001; public static final int items_layout=0x7f030002; public static final int list_item=0x7f030003; public static final int main=0x7f030004; } public static final class string
{
public static final int app_name=0x7f050000; public static final int hello_world=0x7f050001; } public static final class style
{
public static final int AppTheme=0x7f060000; } }

(9)、功能清單配置文件AndroidManifest.xml如下所示

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.qiang.base_adapter"
  android:versionCode="1"
  android:versionName="1.0" >
  <uses-sdk
    android:minSdkVersion="10"
    android:targetSdkVersion="10" />
    <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
    <activity
      android:name="com.qiang.base_adapter.MainActivity"
      android:label="@string/app_name" >
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
   </application>
</manifest>

6、Android中的適配器(Adapter)繼承關系

 

7、Android中的適配器(Adapter)繼承關系

 

8、Android中的適配器(Adapter)繼承關系


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM