1、Android之自定义Adapter的ListViewAndroid之自定义Adapter的ListViewAndroid自定义Adapter的ListView的思路及代码,需要的朋友可以参考一下在开发中,我们经常使用到ListView这个控件。Android的API也提供了许多创建ListView适配器的快捷方式。例如ArrayAdapter、SimpleAdapter和SimpleCursorAdapter等。但你是否发现,如果采用这些系统自带的适配器,对于事件的响应只能局限在一个行单位。假设一行里面有一个按钮和一个图片控件,它们之间的响应操作是不一样的。若采用系统自带的适配器,就不能精确
2、到每个控件的响应事件。这时,我们一般采取自定义适配器来实现这个比较精确地请求。ListView的创建,一般要具备两大元素: 1)数据集,即要映射的字符串、图片信息之类。 2)适配器,实现把要映射的字符串、图片信息映射成视图(如Textview、Image等组件),再添加到ListView中。实现细节: 1、创建数据集,一般定义如下复制代码 代码如下:private ListMap listItems;元素添加方式:复制代码 代码如下: Map map = new HashMap(); map.put(image, imgeIDsi); /图片资源 map.put(title, 物品名称:);
3、/物品标题 map.put(info, goodsNamesi); /物品名称 map.put(detail, goodsDetailsi); /物品详情 listItems.add(map); /添加一项 2、创建适配器复制代码 代码如下: public class ListViewAdapter extends BaseAdapter. /自定义的适配器一般继承BaseAdapter类 listViewAdapter = new ListViewAdapter(this, listItems);3、给ListView设置适配器复制代码 代码如下: listView.setAdapter(l
4、istViewAdapter);4、这里还有个关键点,如何把list_item.xml布局作为一个视图,添加到listView中:复制代码 代码如下: LayoutInflater listContainer; /视图容器工厂 listContainer = LayoutInflater.from(context); /创建视图容器工厂并设置上下文 convertView = listContainer.inflate(R.layout.list_item, null); /创建list_item.xml布局文件的视图实例视图如下:1)布局文件main.xml 复制代码 代码如下: 列表项布局
5、文件list_item.xml 复制代码 代码如下: 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;
6、 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 listVi
7、ewAdapter; private ListMap 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 = 蛋糕:好好吃。, 礼物:礼轻情重。, 邮票:环游世界。, 爱心:世界都有爱。, 鼠标:反应敏
8、捷。, 音乐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); imgb
9、t_sum.setOnClickListener(new ClickEvent(); listItems = getListItems(); listViewAdapter = new ListViewAdapter(this, listItems); /创建适配器 listView.setAdapter(listViewAdapter); /* * 初始化商品信息 */ private ListMap getListItems() ListMap listItems = new ArrayListMap(); for(int i = 0; i goodsNames.length; i+) M
10、ap map = new HashMap(); map.put(image, imgeIDsi); /图片资源 map.put(title, 物品名称:); /物品标题 map.put(info, goodsNamesi); /物品名称 map.put(detail, goodsDetailsi); /物品详情 listItems.add(map); return listItems; class ClickEvent implements OnClickListener Override publicvoid onClick(View v) / TODO Auto-generated met
11、hod stub String goodsList = ; for(int i = 0; i listItems.size(); i+) goodsList += listViewAdapter.hasChecked(i)? goodsNamesi + : ; new AlertDialog.Builder(MyListView.this) .setTitle(购物清单:) .setMessage(你好,你选择了如下商品:n + goodsList) .setPositiveButton(确定, null) .show(); 适配器代码:复制代码 代码如下:package com.myAndr
12、oid.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
13、; 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; /运行上下文 private ListMap listItems; /商品信息集合 private LayoutIn
14、flater listContainer; /视图容器 privateboolean hasChecked; /记录商品选中状态 publicfinalclass ListItemView /自定义控件集合 public ImageView image; public TextView title; public TextView info; public CheckBox check; public Button detail; public ListViewAdapter(Context context, ListMap listItems) this.context = context;
15、 listContainer = LayoutInflater.from(context); /创建视图容器并设置上下文 this.listItems = listItems; hasChecked = newbooleangetCount(); publicint getCount() / TODO Auto-generated method stub return listItems.size(); public Object getItem(int arg0) / TODO Auto-generated method stub returnnull; publiclong getItem
16、Id(int arg0) / TODO Auto-generated method stub return0; /* * 记录勾选了哪个物品 * param checkedID 选中的物品序号 */ privatevoid checkedChange(int checkedID) hasCheckedcheckedID = !hasCheckedcheckedID; /* * 判断物品是否选择 * param checkedID 物品序号 * return 返回是否选中状态 */ publicboolean hasChecked(int checkedID) return hasCheckedcheckedID; /* * 显示物品详情 * param clickID */ privatevoid showDetailInfo(int clickID) new AlertDialog.Builder(context) .setTitle(物品详情: + listItems.get(clickID).get(info) .setMessage(listItems.get(clickID).get(detail).t
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1