Android之自定义Adapter的ListView.docx

上传人:b****8 文档编号:10982326 上传时间:2023-02-24 格式:DOCX 页数:15 大小:155.33KB
下载 相关 举报
Android之自定义Adapter的ListView.docx_第1页
第1页 / 共15页
Android之自定义Adapter的ListView.docx_第2页
第2页 / 共15页
Android之自定义Adapter的ListView.docx_第3页
第3页 / 共15页
Android之自定义Adapter的ListView.docx_第4页
第4页 / 共15页
Android之自定义Adapter的ListView.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

Android之自定义Adapter的ListView.docx

《Android之自定义Adapter的ListView.docx》由会员分享,可在线阅读,更多相关《Android之自定义Adapter的ListView.docx(15页珍藏版)》请在冰豆网上搜索。

Android之自定义Adapter的ListView.docx

Android之自定义Adapter的ListView

Android之自定义Adapter的ListView

Android自定义Adapter的ListView的思路及代码,需要的朋友可以参考一下

 在开发中,我们经常使用到ListView这个控件。

Android的API也提供了许多创建ListView适配器的快捷方式。

例如ArrayAdapter、SimpleAdapter和SimpleCursorAdapter等。

但你是否发现,如果采用这些系统自带的适配器,对于事件的响应只能局限在一个行单位。

假设一行里面有一个按钮和一个图片控件,它们之间的响应操作是不一样的。

若采用系统自带的适配器,就不能精确到每个控件的响应事件。

这时,我们一般采取自定义适配器来实现这个比较精确地请求。

ListView的创建,一般要具备两大元素:

      1)数据集,即要映射的字符串、图片信息之类。

      2)适配器,实现把要映射的字符串、图片信息映射成视图(如Textview、Image等组件),再添加到ListView中。

实现细节:

      1、创建数据集,一般定义如下

复制代码代码如下:

 privateList>listItems;

元素添加方式:

复制代码代码如下:

      Mapmap=newHashMap();      

 map.put("image",imgeIDs[i]);         //图片资源    

   map.put("title","物品名称:

");          //物品标题       

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

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

 listItems.add(map);                        //添加一项

2、创建适配器

复制代码代码如下:

      publicclassListViewAdapterextendsBaseAdapter{........} //自定义的适配器一般继承BaseAdapter类

       listViewAdapter=newListViewAdapter(this,listItems);

3、给ListView设置适配器

复制代码代码如下:

      listView.setAdapter(listViewAdapter);

4、这里还有个关键点,如何把list_item.xml布局作为一个视图,添加到listView中:

复制代码代码如下:

       LayoutInflaterlistContainer;  //视图容器工厂

       listContainer=LayoutInflater.from(context);//创建视图容器工厂并设置上下文

       convertView=listContainer.inflate(R.layout.list_item,null);  //创建list_item.xml布局文件的视图

实例视图如下:

1)布局文件main.xml  

复制代码代码如下:

xmlversion="1.0"encoding="utf-8"?

>

Android="

   Android:

orientation="vertical"

   Android:

layout_width="fill_parent"

   Android:

layout_height="fill_parent">

   

--结算-->

   

gravity="center_horizontal"

   Android:

orientation="horizontal"android:

layout_width="fill_parent"

   Android:

layout_height="wrap_content">

   

text="结算:

"

       Android:

layout_width="wrap_content"

       Android:

layout_height="wrap_content"  

       Android:

textColor="#FFFFFFFF"  

       Android:

textSize="20px"/>

   

id="@+id/imgbt_sum"  

       Android:

layout_width="40px"

       Android:

layout_height="40px"

       Android:

background="@drawable/shopping"/>

   

   

text="商品列表:

"

       Android:

layout_width="wrap_content"

       Android:

layout_height="wrap_content"  

       Android:

textColor="#FFFFFFFF"/>

   

--商品列表-->  

   

id="@+id/list_goods"  

       Android:

layout_width="fill_parent"

       Android:

layout_height="wrap_content"/>

 列表项布局文件list_item.xml    

 

复制代码代码如下:

 

xmlversion="1.0"encoding="utf-8"?

>

Android="

   Android:

orientation="horizontal"android:

layout_width="fill_parent"

   Android:

layout_height="fill_parent">

   

--商品图片-->

   

id="@+id/imageItem"  

       Android:

layout_width="wrap_content"

       Android:

layout_height="wrap_content"  

       Android:

layout_margin="5px"/>

   

--商品信息-->

   

orientation="vertical"

       Android:

layout_width="wrap_content"  

       Android:

layout_height="wrap_content">

       

id="@+id/titleItem"  

           Android:

layout_width="wrap_content"

           Android:

layout_height="wrap_content"  

           Android:

textColor="#FFFFFFFF"

           Android:

textSize="13px"/>

       

id="@+id/infoItem"  

           Android:

layout_width="wrap_content"

           Android:

layout_height="wrap_content"  

           Android:

textColor="#FFFFFFFF"

           Android:

textSize="22px"/>

   

   

--购买和商品详情-->

   

gravity="right"

   Android:

orientation="horizontal"android:

layout_width="fill_parent"

   Android:

layout_height="wrap_content">

   

id="@+id/checkItem"  

       Android:

layout_width="wrap_content"

       Android:

layout_height="wrap_content"  

       Android:

layout_margin="5px"/>

   

id="@+id/detailItem"  

       Android:

layout_width="wrap_content"

       Android:

layout_height="wrap_content"  

       Android:

layout_margin="5px"/>

   

 

  2)代码,主代码:

  

复制代码代码如下:

packagecom.myAndroid.test; 

importjava.util.ArrayList; 

importjava.util.HashMap; 

importjava.util.List; 

importjava.util.Map; 

importAndroid.app.Activity; 

importAndroid.app.AlertDialog; 

importAndroid.content.DialogInterface; 

importAndroid.os.Bundle; 

importAndroid.view.View; 

importAndroid.view.View.OnClickListener; 

importAndroid.widget.ArrayAdapter; 

importAndroid.widget.ImageButton; 

importAndroid.widget.ListView; 

publicclassMyListViewextendsActivity{ 

   privateListViewlistView; 

   privateImageButtonimgbt_sum; 

   privateListViewAdapterlistViewAdapter; 

   privateList>listItems; 

   privateInteger[]imgeIDs={R.drawable.cake,  

           R.drawable.gift,R.drawable.letter, 

           R.drawable.love,R.drawable.mouse, 

           R.drawable.music}; 

   privateString[]goodsNames={"蛋糕","礼物",  

           "邮票","爱心","鼠标","音乐CD"}; 

   privateString[]goodsDetails={ 

           "蛋糕:

好好吃。

",  

           "礼物:

礼轻情重。

",  

           "邮票:

环游世界。

",  

           "爱心:

世界都有爱。

", 

           "鼠标:

反应敏捷。

", 

           "音乐CD:

酷我音乐。

"}; 

   /**Calledwhentheactivityisfirstcreated.*/

   @Override

   publicvoidonCreate(BundlesavedInstanceState){ 

       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(newClickEvent()); 

       listItems=getListItems(); 

       listViewAdapter=newListViewAdapter(this,listItems);//创建适配器 

       listView.setAdapter(listViewAdapter); 

   } 

   /**

    *初始化商品信息

    */

   privateList>getListItems(){ 

       List>listItems=newArrayList>(); 

       for(inti=0;i

           Mapmap=newHashMap();  

           map.put("image",imgeIDs[i]);              //图片资源 

           map.put("title","物品名称:

");             //物品标题 

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

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

           listItems.add(map); 

       }    

       returnlistItems; 

   } 

   classClickEventimplementsOnClickListener{ 

       @Override

       publicvoidonClick(Viewv){ 

           //TODOAuto-generatedmethodstub 

           StringgoodsList=""; 

           for(inti=0;i

               goodsList+=listViewAdapter.hasChecked(i)?

goodsNames[i]+" ":

""; 

           } 

           newAlertDialog.Builder(MyListView.this) 

           .setTitle("购物清单:

") 

           .setMessage("你好,你选择了如下商品:

\n"+goodsList) 

           .setPositiveButton("确定",null) 

           .show(); 

       } 

   } 

适配器代码:

复制代码代码如下:

packagecom.myAndroid.test; 

importjava.util.List; 

importjava.util.Map; 

importAndroid.app.AlertDialog; 

importAndroid.content.Context; 

importAndroid.util.Log; 

importAndroid.view.LayoutInflater; 

importAndroid.view.View; 

importAndroid.view.ViewGroup; 

importAndroid.widget.BaseAdapter; 

importAndroid.widget.Button; 

importAndroid.widget.CheckBox; 

importAndroid.widget.CompoundButton; 

importAndroid.widget.ImageView; 

importAndroid.widget.ListView; 

importAndroid.widget.TextView; 

publicclassListViewAdapterextendsBaseAdapter{ 

   privateContextcontext;                       //运行上下文 

   privateList>listItems;   //商品信息集合 

   privateLayoutInflaterlistContainer;          //视图容器 

   privateboolean[]hasChecked;                  //记录商品选中状态 

   publicfinalclassListItemView{               //自定义控件集合   

           publicImageViewimage;   

           publicTextViewtitle;   

           publicTextViewinfo; 

           publicCheckBoxcheck; 

           publicButtondetail;        

    }   

     

   publicListViewAdapter(Contextcontext,List>listItems){ 

       this.context=context;          

       listContainer=LayoutInflater.from(context);  //创建视图容器并设置上下文 

       this.listItems=listItems; 

       hasChecked=newboolean[getCount()]; 

   } 

   publicintgetCount(){ 

       //TODOAuto-generatedmethodstub 

       returnlistItems.size(); 

   } 

   publicObjectgetItem(intarg0){ 

       //TODOAuto-generatedmethodstub 

       returnnull; 

   } 

   publiclonggetItemId(intarg0){ 

       //TODOAuto-generatedmethodstub 

       return0; 

   } 

   /**

    *记录勾选了哪个物品

    *@paramcheckedID选中的物品序号

    */

   privatevoidcheckedChange(intcheckedID){ 

       hasChecked[checkedID]=!

hasChecked[checkedID]; 

   } 

   /**

    *判断物品是否选择

    *@paramcheckedID物品序号

    *@return返回是否选中状态

    */

   publicbooleanhasChecked(intcheckedID){ 

       returnhasChecked[checkedID]; 

   } 

   /**

    *显示物品详情

    *@paramclickID

    */

   privatevoidshowDetailInfo(intclickID){ 

       newAlertDialog.Builder(context) 

       .setTitle("物品详情:

"+listItems.get(clickID).get("info")) 

       .setMessage(listItems.get(clickID).get("detail").t

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1