超级adapter 大大减少adapter代码

package com.clsys.adapter;

import java.util.ArrayList;

import com.clsys.activity.R;

import android.content.Context;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class SuperLVAdapter<T> extends BaseAdapter {
	private final int mIdResource;
	private Context mContext;

	private ArrayList<T> mArrayList;
	public ViewHolderBase holder = new ViewHolderBase();

	public SuperLVAdapter(Context mContext, int mIdResource,
			ArrayList<T> mArrayList) {
		this.mContext = mContext;
		this.mIdResource = mIdResource;
		this.mArrayList = mArrayList;
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return mArrayList.size();
	}

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return mArrayList.get(position);
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {

		if (convertView == null) {
			convertView = LayoutInflater.from(mContext).inflate(mIdResource,
					null);
		}
		initViewContent(convertView);
		return convertView;
	}

	public void initViewContent(View convertView) {

	}

	class ViewHolderBase {
		// I added a generic return type to reduce the casting noise in client
		// code
		@SuppressWarnings("unchecked")
		public <T extends View> T get(View view, int id) {
			SparseArray<View> viewHolder = (SparseArray<View>) view.getTag();
			if (viewHolder == null) {
				viewHolder = new SparseArray<View>();
				view.setTag(viewHolder);
			}
			View childView = viewHolder.get(id);
			if (childView == null) {
				childView = view.findViewById(id);
				viewHolder.put(id, childView);
			}
			return (T) childView;
		}
	}
}

具体用法:

继承此类后  重写下面这个方法就好了   赶紧试试吧

public void initViewContent(View convertView) { TextView tvTextView = holder.get(convertView, R.id.tv);tv.settext("测试");}

欢迎关注公众账号 jszj2014215 分享android资讯和技术相关问题

时间: 2024-08-09 14:44:36

超级adapter 大大减少adapter代码的相关文章

Effective前端5:减少前端代码耦合

什么是代码耦合?代码耦合的表现是改了一点毛发而牵动了全身,或者是想要改点东西,需要在一堆代码里面找半天.由于前端需要组织js/css/html,耦合的问题可能会更加明显,下面按照耦合的情况分别说明: 1. 避免全局耦合 这应该是比较常见的耦合.全局耦合就是几个类.模块共用了全局变量或者全局数据结构,特别是一个变量跨了几个文件.例如下面,在html里面定义了一个变量: 在html里面定义全局变量 XHTML 1 2 3 4 5 <script> varPAGE=20; </script&g

减少C++代码编译时间的方法

c++ 的代码包含头文件和实现文件两部分, 头文件一般是提供给别人(也叫客户)使用的, 但是一旦头文件发生改变,不管多小的变化,所有引用他的文件就必须重新编译,编译就要花时间,假如你做的工程比较大(比如二次封装chrome这类的开发),重新编译一次的时间就会浪费上班的大部分时间,这样干了一天挺累的, 但是你的老板说你没有产出,结果你被fired, 是不是很怨啊, 如果你早点看到这段文章,你就会比你的同事开发效率高那么一些,那样被fired就不会是你了,你说这篇文章是不是价值千金!开个玩笑 :),

减少前端代码耦合

什么是代码耦合?代码耦合的表现是改了一点毛发而牵动了全身,或者是想要改点东西,需要在一堆代码里面找半天.由于前端需要组织js/css/html,耦合的问题可能会更加明显,下面按照耦合的情况分别说明: 这应该是比较常见的耦合.全局耦合就是几个类.模块共用了全局变量或者全局数据结构,特别是一个变量跨了几个文件.例如下面,在html里面定义了一个变量: <script> var PAGE = 20; </script> <script src="main.js"

减少前端代码耦合的几个方法

1. 避免全局耦合 这应该是比较常见的耦合.全局耦合就是几个类.模块共用了全局变量或者全局数据结构,特别是一个变量跨了几个文件 2.js/css/html的耦合 不推荐直接在js里面更改样式属性,而应该通过增删类来控制样式,这样子样式还是回归到css文件里面 3.减少重复代码 整一个的思路是这样的:出现了重复代码 -> 封装成一个函数 -> 封装成一个模块 -> 封装成一个插件,抽象级别不断提高,将共有的特性和有差异的地方分离出来.当你走在抽象与封装的路上的时候,那你应该也是走在了大神的

用泛型减少重复代码,使代码更合理、更优雅

有这样一个场景,需要对接接口,以获取取得数据. 例如获取订单列表 接口请求参数(json格式): 1 { 2 //公共头部 3 "head":{ 4 "method":"getOrders", //接口方法 5 "sign":"xxxx" //签名 6 }, 7 //私有主体 8 "body":{ 9 "userId":"1", //用户ID 10

使用Swift的代理,闭包来封装一个公用协议减少垃圾代码

iOS开发中,如果不进行适当的封装,使用协议或者继承类来进行开发,你就会遇到传说中的ViewController(以后简称VC) Hell的问题…… 比如说,我们先声网App中为了调用接口,做简单的判断,会有如下的垃圾代码(前辈遗留下来的): override func viewDidLoad() { super.viewDidLoad() var color = UIColor(red: 153/255, green: 204/255, blue: 204/255, alpha: 1) sel

MySQL巧用FIND_IN_SET和GROUP_CONCAT函数减少Java代码量

数据库表简介:物品表 `id` int(11)  '物品id,唯一标识', `name` varchar(255) '物品名称', `level` int(11) '物品类别等级,礼品包为最高级1,类别为2级,详细物品为3级', `parentId` int(11) '只有3级详细物品有上级id', `childIds` varchar(255)  '只有1级礼品包级有包含所有3级物品id的字符串,id之间用","隔开', 问题描述:利用sql语句简化代码,让Java代码可以直接通过j

超级简单JS网页倒计时代码

<script type="text/javascript"> // JavaScript Document function ShowTimes(){ var AfterTime= new Date("2014/05/25 00:00:00");//活动截止时间 LeaveTime = AfterTime - new Date(); LeaveDays=Math.floor(LeaveTime/(1000*60*60*24));//天 LeaveHou

href超级链接里加上javascript代码的,还有target问题

得把target="_blank"去掉才好用,在google浏览器有这个也没事,但是在Ie里有这个就不行了