Android適配器Adapter學習

來源:互聯網
上載者:User

           在開發中我們需要綁定一些資料展現到案頭上,這是就需要AdapterView。AdapterView是ViewGroup的子類,它決定了怎麼展現視圖通過Adapter來綁定特殊的資料類型。 AdapterView是非常有協助的當你展現資料在你的布局中。Gallery,ListView
Spinner是AdapterView的子類。

      下面看一下AdapterView的結構圖:

     

      然後再看一下Adapter的結構圖:

    

    上面已經充分展現了他們的子類和父類的基礎關係。

     下面我們看一個ListViewDemo的例子:

    先來看一個簡單的adapter的例子:

   

public class SimpleList extends ListActivity {    private String[] mListString={"姓名:王魁鋒","性別:男","年齡:23",    "居住地:上海市普陀區","郵箱:wangkuifeng0118@126.com"};private ListView mListView=null;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);mListView=this.getListView();setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,mListString));mListView.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {// TODO Auto-generated method stubToast.makeText(SimpleList.this, "你選擇了:"+mListString[position], 1).show();}});}

  這裡用到了系統定義好的適配模式,當然這隻能用來簡單的資料適配,下面看一下效果:

   

    接下來看一個稍微複雜點的,SimpleAdapter怎麼適配:

   

public class IconList extends ListActivity { private String[] mListTitle = { "姓名", "性別", "年齡", "居住地","郵箱"};      private String[] mListStr = { "王魁鋒", "男", "23", "上海市普陀區",          "wangkuifeng0118@126.com"};      ListView mListView = null;      ArrayList<Map<String,Object>> mData= new ArrayList<Map<String,Object>>();;        @Override    protected void onCreate(Bundle savedInstanceState) {    // TODO Auto-generated method stub     mListView = getListView();               int lengh = mListTitle.length;       for(int i =0; i < lengh; i++) {           Map<String,Object> item = new HashMap<String,Object>();           item.put("image", R.drawable.portrait);           item.put("title", mListTitle[i]);           item.put("text", mListStr[i]);           mData.add(item);        }       SimpleAdapter adapter = new SimpleAdapter(this,mData,R.layout.iconlist,           new String[]{"image","title","text"},new int[]{R.id.image,R.id.title,R.id.text});           setListAdapter(adapter);       mListView.setOnItemClickListener(new OnItemClickListener() {  @Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {// TODO Auto-generated method stub Toast.makeText(IconList.this,"您選擇了標題:" + mListTitle[position] + "    內容:"+mListStr[position], Toast.LENGTH_LONG).show();    }       });      super.onCreate(savedInstanceState);    }}

    上面的資料可以是同資料庫讀取的也可以是從網路擷取的,這裡不做過多介紹,看下效果:

   

      哈哈 看起來美觀了些,如果要做更複雜的布局,哪就要用BaseAdapter了。先看一下布局檔案:

<?xml version="1.0" encoding="utf-8"?>    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"      android:layout_width="fill_parent" android:layout_height="wrap_content">      <ImageView android:id="@+id/color_image"          android:layout_width="wrap_content" android:layout_height="fill_parent"          android:layout_alignParentTop="true" android:layout_alignParentBottom="true"          android:adjustViewBounds="true"          android:padding="2dip" />      <TextView android:id="@+id/color_title"          android:layout_width="fill_parent" android:layout_height="wrap_content"          android:layout_toRightOf="@+id/color_image"          android:layout_alignParentTop="true"          android:layout_alignParentRight="true" android:singleLine="true"          android:ellipsize="marquee"           android:textSize="15dip"  />      <TextView android:id="@+id/color_text"          android:layout_width="fill_parent" android:layout_height="wrap_content"          android:layout_toRightOf="@+id/color_image"          android:layout_below="@+id/color_title"          android:layout_alignParentBottom="true"          android:layout_alignParentRight="true"           android:singleLine="true"          android:ellipsize="marquee"           android:textSize="20dip" />  </RelativeLayout>  

  
下面是核心代碼:

 

public class ColorList extends ListActivity { private String[] mListTitle = { "姓名", "性別", "年齡", "居住地","郵箱"};   private String[] mListText={"王魁鋒","男","23","上海市普陀區","wangkuifeng0118@126.com"}; private ListView mListView=null; private MyListAdapter myAdapter=null;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stub mListView=this.getListView(); myAdapter=new MyListAdapter(this); this.setListAdapter(myAdapter);  mListView.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {// TODO Auto-generated method stubView v=parent.getChildAt(position);v.setBackgroundColor(Color.RED);Toast.makeText(ColorList.this, "你選擇了 "+mListText[position], 1).show();}});super.onCreate(savedInstanceState);}private class MyListAdapter extends BaseAdapter{        private Context mContext;private int[] colors=new int[]{0xff626569,0xff4f5257 }; public MyListAdapter(Context context){ mContext=context; }@Overridepublic int getCount() {// TODO Auto-generated method stubreturn mListText.length;}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ImageView image=null;TextView title=null;TextView  content=null;if(convertView==null){convertView=LayoutInflater.from(mContext).inflate(R.layout.colorlist, null);image=(ImageView) convertView.findViewById(R.id.color_image);title=(TextView) convertView.findViewById(R.id.color_title);content=(TextView) convertView.findViewById(R.id.color_text);}int colorPos=position%colors.length;convertView.setBackgroundColor(colors[colorPos]);title.setText(mListTitle[position]);content.setText(mListText[position]);image.setImageResource(R.drawable.portrait);return convertView;}}}

     BaseAdapter可以讓我們做比較複雜的布局,只要在xml檔案中設定好布局格式,在getView中分別取出放入相應的值就可以了。下面看一些效果:

  

    還有一些SpinnerAdapter和SimpleCursorAdapter等系統內建的適配器,都是比較簡單的,可以看下API自行練習一下,這裡特別說明一下,從資料庫裡取出的資料最好直接放入 SimpleCursorAdapter很方便的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.