在上篇Android——ListView实现简单列表 中,利用SimpleAdapter实现了简单的列表绑定。在本文中,主要是通过重写getView方法,来看下adapter内部绑定数据大致是个什么流程。


首先加入实现类:

class mTestAdapter extends SimpleAdapter {private Context context; /*运行环境*/ArrayList<HashMap<String, String>> listItem;  /*数据源*/private LayoutInflater listContainer; // 视图容器    class ListItemView { // 自定义控件集合public TextView txtName;}    /*construction function*/public mTestAdapter(Context context,                ArrayList<HashMap<String, String>> data, int resource,                String[] from, int[] to) {            super(context, data, resource, from, to);           this.listContainer = LayoutInflater.from(context); // 创建视图容器并设置上下文        this.context=context;          listItem=data;      }    /**     * @see android.widget.Adapter#getCount()     */      public int getCount() {             return listItem.size();      }        /**     * @see android.widget.Adapter#getItem(int)     */      public Object getItem(int position) {                return listItem.get(position);      }        /**     * @see android.widget.Adapter#getItemId(int)     */      public long getItemId(int position) {                return position;          }          @Overridepublic View getView(int position, View convertView, ViewGroup parent) {final int mPosition = position;    ListItemView listItemView = null;if (convertView == null) {convertView = listContainer.inflate(R.layout.listview_item, null);//加载布局listItemView = new ListItemView();/*初始化控件容器集合*/listItemView.txtName=(TextView) convertView.findViewById(R.id.name); // 设置控件集到convertViewconvertView.setTag(listItemView);}else{listItemView=(ListItemView)convertView.getTag();//利用缓存的View}/* * PS: * 这里放入对控件的属性及事件进行初始化设置的操作 * *//*TextView设置点击事件*/        listItemView.txtName.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                Toast.makeText(getApplicationContext(), "点击了"+mPosition, Toast.LENGTH_SHORT).show();            }            });        //设置text的值(用position标记来看的更清楚点儿)        listItemView.txtName.        setText(mPosition+" "+listItem.get(mPosition).get("ItemName"));return convertView;}}}

我们用这个实现类来取代我们之前用的SimpleAdapter.

mTestAdapter listItemAdapter=new mTestAdapter(getBaseContext(),/*指明了SimpleAdapter关联的View的运行环境,也就是当前的Activity*/listItem,/*由Map组成的List,在List中的每条目对应ListView的一行,每一个Map中包含的就是所有在from参数中指定的key*/R.layout.listview_item,/*定义列表项的布局文件的资源ID,该资源文件至少应该包含在to参数中定义的ID*/new String[]{"ItemName"},/*将被添加到Map映射上的Key*/new int[] {R.id.name}/*将绑定数据的视图的Id跟from参数对应,这些被绑定的视图元素应该全是TextView*/);//设置适配器


之后,run下,看看我们加的toast:




发现点击事件加上了,而且通过position,很容易区分我们当前到底操作的时候那个item,并可以针对这个Item进行有针对的操作。尤其是当item上面有button的时候,重写Adapter就显得比较简单了。







更多相关文章

  1. [图解]Android源码分析——Service的启动和绑定过程
  2. Android中实现整个视图切换的左右滑动效果
  3. android 权限明细
  4. Android之LinearLayout(线性布局)
  5. Android(安卓)S5PV210 fimc驱动分析 - fimc_regs.c
  6. Android(安卓)DownloadManager 用法
  7. android有用的知识
  8. android -> 修改自动转为大写 的textAllCaps 属性
  9. Android中如何设置RadioButton在文字的右边,图标在左边

随机推荐

  1. MySQL常用的建表、添加字段、修改字段、
  2. Mac下MySQL安装配置教程
  3. 配置Mysql主从服务实现实例
  4. windows2008 64位系统下MySQL 5.7绿色版
  5. 图文详解MySQL中两表关联的连接表如何创
  6. VMWare linux mysql 5.7.13安装配置教程
  7. 深度解析MySQL启动时报“The server quit
  8. MySQL5.7.18修改密码的方法
  9. Linux CentOS MySQL数据库安装配置教程
  10. Centos 7下使用RPM包安装MySQL 5.7.9教程