在上篇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之ListView控件
  3. 系出名门Android(7) - 控件(View)之ZoomControls, Include...
  4. Android学习笔记(27):日历视图Calendar
  5. Android在Activity中获得控件宽高和截屏操作
  6. Android常用控件之ExpandableList的使用
  7. android 常见布局及控件的属性详解

随机推荐

  1. 判断字符串是否为空变量
  2. 一次内存性能提升的项目实践
  3. HCDA 协议配置
  4. Photoshop 2020 for MAC 破解版 永久版
  5. strcat和strncat的区别及原理
  6. 自学Python的第一天
  7. 挑战Redis单实例内存最大极限,“遭遇”NUM
  8. 【讲清楚,说明白!】Ansible-playbook使用详
  9. C语言中的指针
  10. 开发内功修炼内存篇汇总