Android之自定义Adapter的ListView
16lz
2021-12-04
- <?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">
- <!--结算-->
- <LinearLayoutAndroid:gravity="center_horizontal"
- Android:orientation="horizontal"android:layout_width="fill_parent"
- Android:layout_height="wrap_content">
- <TextViewAndroid:text="结算:"
- 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>
列表项布局文件list_item.xml
- <?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"/>
- <ButtonAndroid:id="@+id/detailItem"
- Android:layout_width="wrap_content"
- Android:layout_height="wrap_content"
- Android:layout_margin="5px"/>
- </LinearLayout>
- </LinearLayout>
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<Map<String,Object>>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<Map<String,Object>>getListItems(){
- List<Map<String,Object>>listItems=newArrayList<Map<String,Object>>();
- for(inti=0;i<goodsNames.length;i++){
- Map<String,Object>map=newHashMap<String,Object>();
- 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<listItems.size();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<Map<String,Object>>listItems;//商品信息集合
- privateLayoutInflaterlistContainer;//视图容器
- privateboolean[]hasChecked;//记录商品选中状态
- publicfinalclassListItemView{//自定义控件集合
- publicImageViewimage;
- publicTextViewtitle;
- publicTextViewinfo;
- publicCheckBoxcheck;
- publicButtondetail;
- }
- publicListViewAdapter(Contextcontext,List<Map<String,Object>>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").toString())
- .setPositiveButton("确定",null)
- .show();
- }
- /**
- *ListViewItem设置
- */
- publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
- //TODOAuto-generatedmethodstub
- Log.e("method","getView");
- finalintselectID=position;
- //自定义视图
- ListItemViewlistItemView=null;
- if(convertView==null){
- listItemView=newListItemView();
- //获取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(newView.OnClickListener(){
- @Override
- publicvoidonClick(Viewv){
- //显示物品详情
- showDetailInfo(selectID);
- }
- });
- //注册多选框状态事件处理
- listItemView.check
- .setOnCheckedChangeListener(newCheckBox.OnCheckedChangeListener(){
- @Override
- publicvoidonCheckedChanged(CompoundButtonbuttonView,
- booleanisChecked){
- //记录物品选中状态
- checkedChange(selectID);
- }
- });
- returnconvertView;
- }
- }
更多相关文章
- 全屏
- Android进阶(十八)AndroidAPP开发问题汇总(二)
- RK3288 Android(安卓)7.1 屏蔽“您的设备内部出现了问题。请联系
- 开发板部分总结
- Android收藏商品/关注商品
- Android滑动冲突二内部拦截法详情
- android面试知识点详情
- Android(安卓)NetworkInfo.DetailedState 获取wifi连接状态详情
- Android原生和H5交互;Android和H5混合开发;WebView点击H5界面跳转