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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android自定义Adapter的ListView的思路及代码

發(fā)布時(shí)間:2025/6/15 Android 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android自定义Adapter的ListView的思路及代码 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Android自定義Adapter的ListView的思路及代碼,需要的朋友可以參考一下 width="650" height="200" align="center,center" id="cproIframe_u2298924_2" src="http://pos.baidu.com/acom?adn=3&adp=1&at=0&aurl=&c01=1&cad=1&ccd=24&cec=gb2312&cfv=19&ch=0&col=zh-CN&conBW=0&conOP=1&cpa=1&cpro_lu=1%2C%23dfe4f9%2C%23000000%2C%E5%AE%8B%E4%BD%93&dai=2&dis=0&layout_filter=image&ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3D9WIspQkznIgsRSj1t4LSRWR7bIk8iHkmIqzlZpmEaMjXxs9aYfSjs9ds38rP8TdQ%26wd%3D%26eqid%3Dc7a9c6c6000309fe00000005563df8d6&ltu=http%3A%2F%2Fwww.jb51.net%2Farticle%2F37236.htm&lu_161=0&lunum=6&n=jb51_cpr&pat=1&pcs=1353x583&pih=80&pis=10000x10000&piw=130&ps=491x211&psr=1366x768&pss=1353x583&ptbg=90&ptp=0&ptt=0&qn=41e0e6bd6b127845&rad=&rsi0=650&rsi1=200&rsi5=4&rss0=%23FFFFFF&rss1=%23FFFFFF&rss2=%23000000&rss3=%23444444&rss4=%23008000&rss5=&rss6=%23e10900&rss7=&scale=&skin=tabcloud_skin_5&stid=5&td_id=2298924&tft=0&titFF=%25E5%25BE%25AE%25E8%25BD%25AF%25E9%259B%2585%25E9%25BB%2591&titFS=14&titSU=0&titTA=left&tlt=0&tn=baiduCustNativeAD&tpr=1446902017322&ts=1&version=2.0&xuanting=0&dtm=BAIDU_DUP2_SETJSONADSLOT&dc=2&di=u2298924&ti=Android%E8%87%AA%E5%AE%9A%E4%B9%89Adapter%E7%9A%84ListView%E7%9A%84%E6%80%9D%E8%B7%AF%E5%8F%8A%E4%BB%A3%E7%A0%81_Android_%E8%84%9A%E6%9C%AC%E4%B9%8B%E5%AE%B6&tt=1446902017069.2570.2894.2894" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" allowtransparency="true">

?在開發(fā)中,我們經(jīng)常使用到ListView這個控件。Android的API也提供了許多創(chuàng)建ListView適配器的快捷方式。例如ArrayAdapter、SimpleAdapter和SimpleCursorAdapter等。但你是否發(fā)現(xiàn),如果采用這些系統(tǒng)自帶的適配器,對于事件的響應(yīng)只能局限在一個行單位。假設(shè)一行里面有一個按鈕和一個圖片控件,它們之間的響應(yīng)操作是不一樣的。若采用系統(tǒng)自帶的適配器,就不能精確到每個控件的響應(yīng)事件。這時(shí),我們一般采取自定義適配器來實(shí)現(xiàn)這個比較精確地請求。

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

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

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

實(shí)現(xiàn)細(xì)節(jié):

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

復(fù)制代碼 代碼如下:
?private List<Map<String, Object>> listItems;

元素添加方式:
復(fù)制代碼 代碼如下:
?????? Map<String, Object> map = new HashMap<String, Object>();??????

? map.put("image", imgeIDs[i]);????????? //圖片資源????

??? map.put("title", "物品名稱:");?????????? //物品標(biāo)題???????

map.put("info", goodsNames[i]);????? //物品名稱????

??? map.put("detail", goodsDetails[i]);?? //物品詳情??????

? listItems.add(map);???????????????????????? //添加一項(xiàng)

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

復(fù)制代碼 代碼如下:
?????? public class ListViewAdapter extends BaseAdapter{........}? //自定義的適配器一般繼承BaseAdapter類

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


3、給ListView設(shè)置適配器
復(fù)制代碼 代碼如下:
?????? listView.setAdapter(listViewAdapter);

4、這里還有個關(guān)鍵點(diǎn),如何把list_item.xml布局作為一個視圖,添加到listView中:
復(fù)制代碼 代碼如下:
??????? LayoutInflater listContainer;?? //視圖容器工廠

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

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


實(shí)例視圖如下:

1)布局文件main.xml??

復(fù)制代碼 代碼如下:
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:Android="http://schemas.android.com/apk/res/android"
??? Android:orientation="vertical"
??? Android:layout_width="fill_parent"
??? Android:layout_height="fill_parent">

??? <!-- 結(jié)算 -->
??? <LinearLayoutAndroid:gravity="center_horizontal"
??? Android:orientation="horizontal"android:layout_width="fill_parent"
??? Android:layout_height="wrap_content">
??? <TextViewAndroid:text="結(jié)算: "
??????? Android:layout_width="wrap_content"
??????? Android:layout_height="wrap_content"??
??????? Android:textColor="#FFFFFFFF"??
??????? Android:textSize="20px"/>
??? <ImageButtonAndroid:id="@+id/imgbt_sum"??
??????? Android:layout_width="40px"
??????? Android:layout_height="40px"
??????? Android:background = "@drawable/shopping"/>
??? </LinearLayout>

??? <TextViewAndroid:text="商品列表: "
??????? Android:layout_width="wrap_content"
??????? Android:layout_height="wrap_content"??
??????? Android:textColor="#FFFFFFFF"/>

??? <!-- 商品列表 -->??
??? <ListViewAndroid:id="@+id/list_goods"??
??????? Android:layout_width="fill_parent"
??????? Android:layout_height="wrap_content"/>

</LinearLayout>

? 列表項(xiàng)布局文件list_item.xml????
? 復(fù)制代碼 代碼如下:
? <?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:Android="http://schemas.android.com/apk/res/android"
??? Android:orientation="horizontal"android:layout_width="fill_parent"
??? Android:layout_height="fill_parent">

??? <!-- 商品圖片 -->
??? <ImageViewAndroid:id="@+id/imageItem"??
??????? Android:layout_width="wrap_content"
??????? Android:layout_height="wrap_content"??
??????? Android:layout_margin="5px"/>

??? <!-- 商品信息 -->
??? <LinearLayoutAndroid:orientation="vertical"
??????? Android:layout_width="wrap_content"??
??????? Android:layout_height="wrap_content">

??????? <TextViewAndroid:id="@+id/titleItem"??
??????????? Android:layout_width="wrap_content"
??????????? Android:layout_height="wrap_content"??
??????????? Android:textColor="#FFFFFFFF"
??????????? Android:textSize="13px"/>
??????? <TextViewAndroid:id="@+id/infoItem"??
??????????? Android:layout_width="wrap_content"
??????????? Android:layout_height="wrap_content"??
??????????? Android:textColor="#FFFFFFFF"
??????????? Android:textSize="22px"/>
??? </LinearLayout>

??? <!-- 購買和商品詳情 -->
??? <LinearLayoutAndroid:gravity="right"
??? Android:orientation="horizontal"android:layout_width="fill_parent"
??? Android:layout_height="wrap_content">
??? <CheckBoxAndroid: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)代碼,主代碼:??

復(fù)制代碼 代碼如下:
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;?

publicclass 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 = {"蛋糕", "禮物",??
??????????? "郵票", "愛心", "鼠標(biāo)", "音樂CD"};?
??? private String[] goodsDetails = {?
??????????? "蛋糕:好好吃。",??
??????????? "禮物:禮輕情重。",??
??????????? "郵票:環(huán)游世界。",??
??????????? "愛心:世界都有愛。",?
??????????? "鼠標(biāo):反應(yīng)敏捷。",?
??????????? "音樂CD:酷我音樂。"};?

??? /** Called when the activity is first created. */
??? @Override
??? publicvoid 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", "物品名稱:");????????????? //物品標(biāo)題?
??????????? map.put("info", goodsNames[i]);???? //物品名稱?
??????????? map.put("detail", goodsDetails[i]); //物品詳情?
??????????? listItems.add(map);?
??????? }????
??????? return listItems;?
??? }?

??? class ClickEvent implements OnClickListener{?

??????? @Override
??????? publicvoid 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();?
??????? }?

??? }?
}?

適配器代碼:

復(fù)制代碼 代碼如下:
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;?

publicclass ListViewAdapter extends BaseAdapter {?
??? private Context context;??????????????????????? //運(yùn)行上下文?
??? private List<Map<String, Object>> listItems;??? //商品信息集合?
??? private LayoutInflater listContainer;?????????? //視圖容器?
??? privateboolean[] hasChecked;?????????????????? //記錄商品選中狀態(tài)?
??? publicfinalclass 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)建視圖容器并設(shè)置上下文?
??????? this.listItems = listItems;?
??????? hasChecked = newboolean[getCount()];?
??? }?

??? publicint getCount() {?
??????? // TODO Auto-generated method stub?
??????? return listItems.size();?
??? }?

??? public Object getItem(int arg0) {?
??????? // TODO Auto-generated method stub?
??????? returnnull;?
??? }?

??? publiclong getItemId(int arg0) {?
??????? // TODO Auto-generated method stub?
??????? return0;?
??? }?

??? /**
???? * 記錄勾選了哪個物品
???? * @param checkedID 選中的物品序號
???? */
??? privatevoid checkedChange(int checkedID) {?
??????? hasChecked[checkedID] = !hasChecked[checkedID];?
??? }?

??? /**
???? * 判斷物品是否選擇
???? * @param checkedID 物品序號
???? * @return 返回是否選中狀態(tài)
???? */
??? publicboolean hasChecked(int checkedID) {?
??????? return hasChecked[checkedID];?
??? }?

??? /**
???? * 顯示物品詳情
???? * @param clickID
???? */
??? privatevoid 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設(shè)置
???? */
??? public View getView(int position, View convertView, ViewGroup parent) {?
??????? // TODO Auto-generated method stub?
??????? Log.e("method", "getView");?
??????? finalint 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);?
??????????? //設(shè)置控件集到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"));?

??????? //設(shè)置文字和圖片?
??????? 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("商品詳情");?
??????? //注冊按鈕點(diǎn)擊時(shí)間愛你?
??????? listItemView.detail.setOnClickListener(new View.OnClickListener() {?
??????????? @Override
??????????? publicvoid onClick(View v) {?
??????????????? //顯示物品詳情?
??????????????? showDetailInfo(selectID);?
??????????? }?
??????? });?
??????? // 注冊多選框狀態(tài)事件處理?
??????? listItemView.check?
??????????????? .setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener() {?
??????????????????? @Override
??????????????????? publicvoid onCheckedChanged(CompoundButton buttonView,?
??????????????????????????? boolean isChecked) {?
??????????????????????? //記錄物品選中狀態(tài)?
??????????????????????? checkedChange(selectID);?
??????????????????? }?
??????? });?

??????? return convertView;?
??? }?
}

總結(jié)

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

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