Android——继承SimpleAdapter重写自己的getView

在上篇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;
	        }  

		@Override
		public 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);
				// 设置控件集到convertView
				convertView.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就显得比较简单了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-03 00:22:30

Android——继承SimpleAdapter重写自己的getView的相关文章

android中SimpleAdapter

代码: import android.app.Activity;import android.os.Bundle;import android.widget.ListView;import android.widget.SimpleAdapter; import java.util.*; public class MainActivity extends Activity { private String[] names=new String[]{ "虎头","弄玉"

黑马程序员--Java基础--重温Java的继承和重写

--Java培训.Android培训.iOS培训..Net培训 期待与您共同交流!-- 继承和重写(extends&override) 1. 继承 1.1. 泛化的过程 前面的案例中定义了T类和J类, 通过分析可以发现, 在这两个类中存在着大量的重复代码,像cells属性.print方法.drop方法.moveLeft方法.moveRight方法,在这两个类中都存在,并且实现上基本也是相同的,本着代码重用的原则,可以使用继承的方式来实现. 首先,构建T类和J类的父类Tetromino类,将公共的

Android -- ListView(SimpleAdapter) 自定义适配器

2.  代码 MainActivity package com.himi; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.AdapterVie

慕课网Java入门第二季6.1 达达租车系统,使用到继承、重写、多态、toString函数

为了方便理解,画了个UML图,可以参考一下为了方便理解,画了个UML图,可以参考一下 定义Car类型:载人+载货 public class Car { int id; String name; int seat; double load; double price; public Car(int id,String name,int seat,double load,double price){ this.id = id; this.name = name; this.seat = seat;

学习Android之SimpleAdapter显示网络图片

效果图: 此程序主要的知识点是:SimpleAdapter本身是不支持网络图片的, 如果在Map.put(a,b)中 b为一个Bitmap,程序不会报红色字体,而是在控制台输出绿色的字体,如下 05-10 15:46:45.474: I/System.out(846): resolveUri failed on bad bitmap uri: [email protected] 要想实现显示网络图片其实很简单,使用SimpleAdapter中的方法simpleAdapter.setViewBin

【转载】 C++多继承中重写不同基类中相同原型的虚函数

本篇随笔为转载,原文地址:C++多继承中重写不同基类中相同原型的虚函数. 在C++多继承体系当中,在派生类中可以重写不同基类中的虚函数.下面就是一个例子: class CBaseA { public: virtual void TestA(); }; class CBaseB { public: virtual void TestB(); }; class CDerived : public CBaseA, public CBaseB { public: virtual void TestA()

android 适配器simpleadapter和baseadapter区别

android 适配器 simpleadapter 和 baseadapter 设计网络程序或者数据处理显示程序的时候,常常会使用 simpleadapter 和baseadapter 来实现. adapter 是适配器模式,是数据和界面之间的桥梁.baseadapter 是一个抽象的类,要使用必需为其定义子类并实现相关方法.simpleadapter 派生于 baseadapter ,已经实现了相关的方法,所以可以直接使用.二者在使用效果上没有太大的区别,两者可以设计出几乎一模一样的界面.但在

注册自动加载方法,序列化以及继承和重写

一.注册自动加载方法以及序列化的实现 class Common{ public function autoload($class_name){ if(file_exists('./'.$class_name.'.class.php')){ include('./'.$class_name.'.class.php'); }else{ echo 'error'; } } public static function autoload1($class_name){ if(file_exists('./

Php面向对象 – 继承和重写

继承: php中,通过在类上,使用特殊的操作达到目的. 通过在定义类时,利用extends来指明当前类对象继承那个类的对象. 例子: class C { public  $p_c =  "value c"; } class D extends C { public  $p_d = "value d"; } $o =  new D; var_dump($o->p_c) var_dump($o->p_d) 输出:string(7) "value c