日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android之自定义Adapter的ListView

發(fā)布時間:2025/6/15 Android 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android之自定义Adapter的ListView 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在開發(fā)中,我們經(jīng)常使用到ListView這個控件。 Android 的API也提供了許多創(chuàng)建ListView適配器的快捷方式。例如 ArrayAdapter、SimpleAdapter和SimpleCursorAdapter 等。但你是否發(fā)現(xiàn),如果采用這些系統(tǒng)自帶的適配器,對于事件的響應只能局限在一個行單位。假設一行里面有一個按鈕和一個圖片控件,它們之間的響應操作是不一樣的。若采用系統(tǒng)自帶的適配器,就 不能精確到每個控件的響應事件 。這時,我們一般采取自定義適配器來實現(xiàn)這個比較精確地請求。

?????? ListView的創(chuàng)建,一般要具備兩大元素:

???????1)數(shù)據(jù)集,即要映射的字符串、圖片信息之類。

???????2)適配器,實現(xiàn)把要映射的字符串、圖片信息映射成視圖(如Textview、Image等組件),再添加到ListView中。

?????? 下面是一個實操例子:

???????實現(xiàn)細節(jié):

???????1、創(chuàng)建數(shù)據(jù)集,一般定義如下

????????private List<Map<String, Object>> listItems;

????????元素添加方式:

????????Map<String, Object> map = new HashMap<String, Object>();?
??? ?? ?map.put("image", imgeIDs[i]);??????? ? //圖片資源
??? ?? ?map.put("title", "物品名稱:");?????????? //物品標題
??? ?? ?map.put("info", goodsNames[i]);????? //物品名稱
??? ?? ?map.put("detail", goodsDetails[i]); ? //物品詳情
??????? listItems.add(map);???????????????????????? //添加一項

????????2、創(chuàng)建適配器

????????public class ListViewAdapter extends BaseAdapter{........}? //自定義的適配器一般繼承BaseAdapter類

??????? listViewAdapter = new ListViewAdapter(this, listItems);

????????3、給ListView設置適配器

????????listView.setAdapter(listViewAdapter);

????????4、這里還有個關鍵點,如何把list_item.xml布局作為一個視圖,添加到listView中:

??????? LayoutInflater listContainer;???//視圖容器工廠

??????? listContainer = LayoutInflater.from(context);?//創(chuàng)建視圖容器工廠并設置上下文

??????? convertView = listContainer.inflate(R.layout.list_item, null);?? //創(chuàng)建list_item.xml布局文件的視圖

???????

????????實例視圖如下:

1)布局文件main.xml ???????
  • <?xml?version="1.0"?encoding="utf-8"?>??
  • ?<LinearLayout?xmlns:Android="http://schemas.android.com/apk/res/android"??
  • ????Android:orientation="vertical"??
  • ????Android:layout_width="fill_parent"??
  • ????Android:layout_height="fill_parent">??
  • ???? ??
  • ????<!--?結算?-->??
  • ????<LinearLayout?Android:gravity="center_horizontal"??
  • ????Android:orientation="horizontal"?android:layout_width="fill_parent"??
  • ????Android:layout_height="wrap_content">??
  • ????<TextView?Android:text="結算:?"??
  • ????????Android:layout_width="wrap_content"??
  • ????????Android:layout_height="wrap_content"? ??
  • ????????Android:textColor="#FFFFFFFF"? ??
  • ????????Android:textSize="20px"/>??
  • ????<ImageButton?Android:id="@+id/imgbt_sum"? ??
  • ????????Android:layout_width="40px"??
  • ????????Android:layout_height="40px"??
  • ????????Android:background?=?"@drawable/shopping"?/>??
  • ????</LinearLayout>??
  • ???? ??
  • ????<TextView?Android:text="商品列表:?"??
  • ????????Android:layout_width="wrap_content"??
  • ????????Android:layout_height="wrap_content"? ??
  • ????????Android:textColor="#FFFFFFFF"?/>??
  • ???????? ??
  • ????<!--?商品列表?-->? ??
  • ????<ListView?Android:id="@+id/list_goods"? ??
  • ????????Android:layout_width="fill_parent"??
  • ????????Android:layout_height="wrap_content"?/>??
  • ???????? ??
  • ?</LinearLayout>??
  • ???????列表項布局文件list_item.xml??????

  • <?xml?version="1.0"?encoding="utf-8"?>??
  • ?<LinearLayout?xmlns:Android="http://schemas.android.com/apk/res/android"??
  • ????Android:orientation="horizontal"?android:layout_width="fill_parent"??
  • ????Android:layout_height="fill_parent">??
  • ??
  • ????<!--?商品圖片?-->??
  • ????<ImageView?Android:id="@+id/imageItem"? ??
  • ????????Android:layout_width="wrap_content"??
  • ????????Android:layout_height="wrap_content"? ??
  • ????????Android:layout_margin="5px"/>??
  • ???? ??
  • ????<!--?商品信息?-->??
  • ????<LinearLayout?Android:orientation="vertical"??
  • ????????Android:layout_width="wrap_content"? ??
  • ????????Android:layout_height="wrap_content">??
  • ??
  • ????????<TextView?Android:id="@+id/titleItem"? ??
  • ????????????Android:layout_width="wrap_content"??
  • ????????????Android:layout_height="wrap_content"? ??
  • ????????????Android:textColor="#FFFFFFFF"??
  • ????????????Android:textSize="13px"?/>??
  • ????????<TextView?Android:id="@+id/infoItem"? ??
  • ????????????Android:layout_width="wrap_content"??
  • ????????????Android:layout_height="wrap_content"? ??
  • ????????????Android:textColor="#FFFFFFFF"??
  • ????????????Android:textSize="22px"?/>??
  • ????</LinearLayout>??
  • ???? ??
  • ????<!--?購買和商品詳情?-->??
  • ????<LinearLayout?Android:gravity="right"??
  • ????Android:orientation="horizontal"?android:layout_width="fill_parent"??
  • ????Android:layout_height="wrap_content">??
  • ????<CheckBox?Android:id="@+id/checkItem"? ??
  • ????????Android:layout_width="wrap_content"??
  • ????????Android:layout_height="wrap_content"? ??
  • ????????Android:layout_margin="5px"/>??
  • ????<Button??Android:id="@+id/detailItem"? ??
  • ????????Android:layout_width="wrap_content"??
  • ????????Android:layout_height="wrap_content"? ??
  • ????????Android:layout_margin="5px"/>??
  • ????</LinearLayout>??
  • ?</LinearLayout>??
  • ????????2)代碼,主代碼:????????

  • package?com.myAndroid.test; ??
  • ??
  • ?import?java.util.ArrayList; ??
  • ?import?java.util.HashMap; ??
  • import?java.util.List; ??
  • import?java.util.Map; ??
  • ??
  • import?Android.app.Activity; ??
  • import?Android.app.AlertDialog; ??
  • import?Android.content.DialogInterface; ??
  • import?Android.os.Bundle; ??
  • import?Android.view.View; ??
  • import?Android.view.View.OnClickListener; ??
  • import?Android.widget.ArrayAdapter; ??
  • import?Android.widget.ImageButton; ??
  • import?Android.widget.ListView; ??
  • ??
  • public?class?MyListView?extends?Activity?{ ??
  • ???? ??
  • ????private?ListView?listView; ??
  • ????private?ImageButton?imgbt_sum; ??
  • ????private?ListViewAdapter?listViewAdapter; ??
  • ????private?List<Map<String,?Object>>?listItems; ??
  • ????private?Integer[]?imgeIDs?=?{R.drawable.cake,? ??
  • ????????????R.drawable.gift,?R.drawable.letter, ??
  • ????????????R.drawable.love,?R.drawable.mouse, ??
  • ????????????R.drawable.music}; ??
  • ????private?String[]?goodsNames?=?{"蛋糕",?"禮物",? ??
  • ????????????"郵票",?"愛心",?"鼠標",?"音樂CD"}; ??
  • ????private?String[]?goodsDetails?=?{ ??
  • ????????????"蛋糕:好好吃。",? ??
  • ????????????"禮物:禮輕情重。",? ??
  • ????????????"郵票:環(huán)游世界。",? ??
  • ????????????"愛心:世界都有愛。", ??
  • ????????????"鼠標:反應敏捷。", ??
  • ????????????"音樂CD:酷我音樂。"}; ??
  • ???? ??
  • ????/**?Called?when?the?activity?is?first?created.?*/??
  • ????@Override??
  • ????public?void?onCreate(Bundle?savedInstanceState)?{ ??
  • ????????super.onCreate(savedInstanceState); ??
  • ????????setContentView(R.layout.main); ??
  • ???????? ??
  • ????????listView?=?(ListView)findViewById(R.id.list_goods);? ??
  • ????????imgbt_sum?=?(ImageButton)?findViewById(R.id.imgbt_sum); ??
  • ????????imgbt_sum.setOnClickListener(new?ClickEvent()); ??
  • ????????listItems?=?getListItems(); ??
  • ????????listViewAdapter?=?new?ListViewAdapter(this,?listItems);?//創(chuàng)建適配器???
  • ????????listView.setAdapter(listViewAdapter); ??
  • ????} ??
  • ???? ??
  • ????/**??
  • ?????*?初始化商品信息??
  • ?????*/??
  • ????private?List<Map<String,?Object>>?getListItems()?{ ??
  • ????????List<Map<String,?Object>>?listItems?=?new?ArrayList<Map<String,?Object>>(); ??
  • ????????for(int?i?=?0;?i?<?goodsNames.length;?i++)?{ ??
  • ????????????Map<String,?Object>?map?=?new?HashMap<String,?Object>();? ??
  • ????????????map.put("image",?imgeIDs[i]);???????????????//圖片資源???
  • ????????????map.put("title",?"物品名稱:");??????????????//物品標題???
  • ????????????map.put("info",?goodsNames[i]);?????//物品名稱???
  • ????????????map.put("detail",?goodsDetails[i]);?//物品詳情???
  • ????????????listItems.add(map); ??
  • ????????}??? ??
  • ????????return?listItems; ??
  • ????} ??
  • ???? ??
  • ????class?ClickEvent?implements?OnClickListener{ ??
  • ??
  • ????????@Override??
  • ????????public?void?onClick(View?v)?{ ??
  • ????????????//?TODO?Auto-generated?method?stub???
  • ????????????String?goodsList?=?""; ??
  • ????????????for(int?i?=?0;?i?<?listItems.size();?i++)?{ ??
  • ????????????????goodsList?+=?listViewAdapter.hasChecked(i)??goodsNames[i]?+?"??":?""; ??
  • ????????????} ??
  • ????????????new?AlertDialog.Builder(MyListView.this) ??
  • ????????????.setTitle("購物清單:") ??
  • ????????????.setMessage("你好,你選擇了如下商品:\n"?+?goodsList) ??
  • ????????????.setPositiveButton("確定",?null) ??
  • ????????????.show(); ??
  • ????????} ??
  • ???????? ??
  • ????} ??
  • } ??
  • ?

    ?

    適配器代碼: ??????
  • package?com.myAndroid.test; ??
  • ??
  • ?import?java.util.List; ??
  • import?java.util.Map; ??
  • ??
  • import?Android.app.AlertDialog; ??
  • import?Android.content.Context; ??
  • import?Android.util.Log; ??
  • import?Android.view.LayoutInflater; ??
  • import?Android.view.View; ??
  • import?Android.view.ViewGroup; ??
  • import?Android.widget.BaseAdapter; ??
  • import?Android.widget.Button; ??
  • import?Android.widget.CheckBox; ??
  • import?Android.widget.CompoundButton; ??
  • import?Android.widget.ImageView; ??
  • import?Android.widget.ListView; ??
  • import?Android.widget.TextView; ??
  • ??
  • public?class?ListViewAdapter?extends?BaseAdapter?{ ??
  • ????private?Context?context;????????????????????????//運行上下文???
  • ????private?List<Map<String,?Object>>?listItems;????//商品信息集合???
  • ????private?LayoutInflater?listContainer;???????????//視圖容器???
  • ????private?boolean[]?hasChecked;???????????????????//記錄商品選中狀態(tài)???
  • ????public?final?class?ListItemView{????????????????//自定義控件集合?????
  • ????????????public?ImageView?image;?? ??
  • ????????????public?TextView?title;?? ??
  • ????????????public?TextView?info; ??
  • ????????????public?CheckBox?check; ??
  • ????????????public?Button?detail;??????? ??
  • ?????}?? ??
  • ???? ??
  • ???? ??
  • ????public?ListViewAdapter(Context?context,?List<Map<String,?Object>>?listItems)?{ ??
  • ????????this.context?=?context;????????? ??
  • ????????listContainer?=?LayoutInflater.from(context);???//創(chuàng)建視圖容器并設置上下文???
  • ????????this.listItems?=?listItems; ??
  • ????????hasChecked?=?new?boolean[getCount()]; ??
  • ????} ??
  • ??
  • ????public?int?getCount()?{ ??
  • ????????//?TODO?Auto-generated?method?stub???
  • ????????return?listItems.size(); ??
  • ????} ??
  • ??
  • ????public?Object?getItem(int?arg0)?{ ??
  • ????????//?TODO?Auto-generated?method?stub???
  • ????????return?null; ??
  • ????} ??
  • ??
  • ????public?long?getItemId(int?arg0)?{ ??
  • ????????//?TODO?Auto-generated?method?stub???
  • ????????return?0; ??
  • ????} ??
  • ???? ??
  • ????/**??
  • ?????*?記錄勾選了哪個物品??
  • ?????*?@param?checkedID?選中的物品序號??
  • ?????*/??
  • ????private?void?checkedChange(int?checkedID)?{ ??
  • ????????hasChecked[checkedID]?=?!hasChecked[checkedID]; ??
  • ????} ??
  • ???? ??
  • ????/**??
  • ?????*?判斷物品是否選擇??
  • ?????*?@param?checkedID?物品序號??
  • ?????*?@return?返回是否選中狀態(tài)??
  • ?????*/??
  • ????public?boolean?hasChecked(int?checkedID)?{ ??
  • ????????return?hasChecked[checkedID]; ??
  • ????} ??
  • ???? ??
  • ????/**??
  • ?????*?顯示物品詳情??
  • ?????*?@param?clickID??
  • ?????*/??
  • ????private?void?showDetailInfo(int?clickID)?{ ??
  • ????????new?AlertDialog.Builder(context) ??
  • ????????.setTitle("物品詳情:"?+?listItems.get(clickID).get("info")) ??
  • ????????.setMessage(listItems.get(clickID).get("detail").toString())?????????????? ??
  • ????????.setPositiveButton("確定",?null) ??
  • ????????.show(); ??
  • ????} ??
  • ???? ??
  • ??????? ??
  • ????/**??
  • ?????*?ListView?Item設置??
  • ?????*/??
  • ????public?View?getView(int?position,?View?convertView,?ViewGroup?parent)?{ ??
  • ????????//?TODO?Auto-generated?method?stub???
  • ????????Log.e("method",?"getView"); ??
  • ????????final?int?selectID?=?position; ??
  • ????????//自定義視圖???
  • ????????ListItemView??listItemView?=?null; ??
  • ????????if?(convertView?==?null)?{ ??
  • ????????????listItemView?=?new?ListItemView();? ??
  • ????????????//獲取list_item布局文件的視圖???
  • ????????????convertView?=?listContainer.inflate(R.layout.list_item,?null); ??
  • ????????????//獲取控件對象???
  • ????????????listItemView.image?=?(ImageView)convertView.findViewById(R.id.imageItem); ??
  • ????????????listItemView.title?=?(TextView)convertView.findViewById(R.id.titleItem); ??
  • ????????????listItemView.info?=?(TextView)convertView.findViewById(R.id.infoItem); ??
  • ????????????listItemView.detail=?(Button)convertView.findViewById(R.id.detailItem); ??
  • ????????????listItemView.check?=?(CheckBox)convertView.findViewById(R.id.checkItem); ??
  • ????????????//設置控件集到convertView???
  • ????????????convertView.setTag(listItemView); ??
  • ????????}else?{ ??
  • ????????????listItemView?=?(ListItemView)convertView.getTag(); ??
  • ????????} ??
  • //??????Log.e("image",?(String)?listItems.get(position).get("title"));??//測試???
  • //??????Log.e("image",?(String)?listItems.get(position).get("info"));???
  • ???????? ??
  • ????????//設置文字和圖片???
  • ????????listItemView.image.setBackgroundResource((Integer)?listItems.get( ??
  • ????????????????position).get("image")); ??
  • ????????listItemView.title.setText((String)?listItems.get(position) ??
  • ????????????????.get("title")); ??
  • ????????listItemView.info.setText((String)?listItems.get(position).get("info")); ??
  • ????????listItemView.detail.setText("商品詳情"); ??
  • ????????//注冊按鈕點擊時間愛你???
  • ????????listItemView.detail.setOnClickListener(new?View.OnClickListener()?{ ??
  • ????????????@Override??
  • ????????????public?void?onClick(View?v)?{ ??
  • ????????????????//顯示物品詳情???
  • ????????????????showDetailInfo(selectID); ??
  • ????????????} ??
  • ????????}); ??
  • ????????//?注冊多選框狀態(tài)事件處理???
  • ????????listItemView.check ??
  • ????????????????.setOnCheckedChangeListener(new?CheckBox.OnCheckedChangeListener()?{ ??
  • ????????????????????@Override??
  • ????????????????????public?void?onCheckedChanged(CompoundButton?buttonView, ??
  • ????????????????????????????boolean?isChecked)?{ ??
  • ????????????????????????//記錄物品選中狀態(tài)???
  • ????????????????????????checkedChange(selectID); ??
  • ????????????????????} ??
  • ????????}); ??
  • ???????? ??
  • ????????return?convertView; ??
  • ????} ??
  • }??
  • ????????至于,如何實現(xiàn)系統(tǒng)自帶的適配器,如ArrayAdapter、SimpleAdapter和SimpleCursorAdapter等,有機會再補充。

    總結

    以上是生活随笔為你收集整理的Android之自定义Adapter的ListView的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。