传统的

 package cct.commonadapter.bean;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.List;
import cct.commonadapter.R; public class MyAdapter extends BaseAdapter {
private LayoutInflater inflater;
private List<Message> mdata;
public MyAdapter(Context context,List<Message> mdata){
inflater=LayoutInflater.from(context);
this.mdata=mdata;
}
@Override
public int getCount() {
return mdata.size();
}
@Override
public Object getItem(int position) {
return mdata.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolders holder;
if(convertView==null){
convertView=inflater.inflate(R.layout.item,parent,false);
holder=new ViewHolders();
holder.mtitle= (TextView) convertView.findViewById(R.id.mtitle);
holder.mdesc= (TextView) convertView.findViewById(R.id.mdesc);
holder.mtime= (TextView) convertView.findViewById(R.id.mtime);
holder.mphone= (TextView) convertView.findViewById(R.id.mphone);
convertView.setTag(holder);
}
else {
holder = (ViewHolders) convertView.getTag();
}
Message ms = mdata.get(position);
holder.mtitle.setText(ms.getTitle());
holder.mdesc.setText(ms.getDesc());
holder.mtime.setText(ms.getTime());
holder.mphone.setText(ms.getPhone()); return convertView;
}
private class ViewHolders
{
TextView mtitle;
TextView mdesc;
TextView mtime;
TextView mphone;
}
}

附上Msessage类

     public class Message {
private String title;
private String desc;
private String time;
private String phone;
public Message(int position) {
}
public Message(String title, String desc, String time, String phone) {
this.title = title;
this.desc = desc;
this.time = time;
this.phone = phone;
}
public String getDesc() {
return desc;
} public void setDesc(String desc) {
this.desc = desc;
} public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public String getTime() {
return time;
} public void setTime(String time) {
this.time = time;
} public String getPhone() {
return phone;
} public void setPhone(String phone) {
this.phone = phone;
} }
万能适配器

//CommonAdapter
1 package cct.commonadapter.adapterUtil;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import java.util.List;
import cct.commonadapter.R; public abstract class CommonAapter<T> extends BaseAdapter {
protected Context context;
protected LayoutInflater inflater;
protected List<T> mdata; public CommonAapter(Context context, List<T> mdata) {
this.context=context;
inflater=LayoutInflater.from(context);
this.mdata=mdata;
}
@Override
public int getCount() {
return mdata.size();
} @Override
public T getItem(int position) {
return mdata.get(position);
} @Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder holder=ViewHolder.get(context,convertView,parent, R.layout.item,position);
covert(holder,getItem(position));
return holder.getMconvertView();
}
public abstract void covert(ViewHolder holder, T t) ; }

通用的Viewholder

 package cct.commonadapter.adapterUtil;
import android.content.Context;
import android.graphics.Bitmap;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView; public class ViewHolder {
private SparseArray<View> mViews;
protected int mPosition;
private View mConvertView;
private Context mContext;
protected int mLayoutId; /**初始化一个ViewHolder
* @param context
* @param itemView
* @param parent
* @param position
*/
public ViewHolder(Context context, View itemView, ViewGroup parent, int position) {
mContext = context;
mConvertView = itemView;
mPosition = position;
mViews = new SparseArray<View>();
mConvertView.setTag(this);
} /**入口方法:用来判断页面是否加载过
* @param context
* @param convertView
* @param parent
* @param layoutId
* @param position
* @return
*/
public static ViewHolder get(Context context, View convertView, ViewGroup parent, int layoutId, int position) {
if (convertView == null)
{
View itemView = LayoutInflater.from(context).inflate(layoutId, parent,
false);
ViewHolder holder = new ViewHolder(context, itemView, parent, position);
holder.mLayoutId = layoutId;
return holder;
} else
{
ViewHolder holder = (ViewHolder) convertView.getTag();
holder.mPosition = position;
return holder;
}
}
public View getMconvertView() {
return mConvertView;
} /**
* 通过viewId获取View
* @param viewId
* @param <T>
* @return
*/
public <T extends View>T getView(int viewId){
View view=mview.get(viewId);
if(view==null)
{view=mconvertView.findViewById(viewId);
mview.put(viewId,view);
}
return (T)view;
}
public int getLayoutId()
{
return mLayoutId;
} public void updatePosition(int position)
{
mPosition = position;
} public int getItemPosition()
{
return mPosition;
} /**通过得到控件id,和类的属性名
* @param viewId
* @param text
* @return
*/
public ViewHolder setTexts(int viewId,String text){
TextView tv=getView(viewId);
tv.setText(text);
return this;
}
public ViewHolder setImageBitmap(int viewId, Bitmap map){
ImageView iv=getView(viewId);
iv.setImageBitmap(map);
return this;
}
public ViewHolder setImageResource(int viewId, int resId)
{
ImageView view = getView(viewId);
view.setImageResource(resId);
return this;
}
public ViewHolder setImageDrawable(int viewId, Drawable drawable)
{
ImageView view = getView(viewId);
view.setImageDrawable(drawable);
return this;
} public ViewHolder setBackgroundColor(int viewId, int color)
{
View view = getView(viewId);
view.setBackgroundColor(color);
return this;
} public ViewHolder setBackgroundRes(int viewId, int backgroundRes)
{
View view = getView(viewId);
view.setBackgroundResource(backgroundRes);
return this;
} public ViewHolder setTextColor(int viewId, int textColor)
{
TextView view = getView(viewId);
view.setTextColor(textColor);
return this;
} public ViewHolder setTextColorRes(int viewId, int textColorRes)
{
TextView view = getView(viewId);
view.setTextColor(mContext.getResources().getColor(textColorRes));
return this;
}
}

任意一个适配器只需要继承上面封装好的适配器

 package cct.commonadapter.bean;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.List;
import cct.commonadapter.R;
import cct.commonadapter.adapterUtil.CommonAapter;
import cct.commonadapter.adapterUtil.ViewHolder;
import cct.commonadapter.bean.Message; public class MyCommonAdapter extends CommonAapter<Message> {
public MyCommonAdapter(Context context, List<Message> mdata){
super(context,mdata);
} @Override
public void covert(ViewHolder holder, Message ms) { holder.setTexts(R.id.mtitle,ms.getTitle())
.setTexts(R.id.mdesc,ms.getDesc())
.setTexts(R.id.mtime,ms.getTime())
.setTexts(R.id.mphone,ms.getPhone());
}
}

BaseAdapter的优化的更多相关文章

  1. Android 对BaseAdapter做优化处理

    对于BaseAdapter相信大家都不陌生,都知道该怎样用.怎样显示数据.怎样尽可能的把每个item做的令自己满意.但问题来了:有些朋友会说我界面做的非常的漂亮,数据也显示的非常完美,但是问什么我的L ...

  2. BaseAdapter优化深入分析

    BaseAdapter是一个数据适配器,将我们提供的数据格式化为ListView可以显示的数据,BaseAdapter的优化直接影响到ListView的显示效率. 我们都知道,ListView自带有回 ...

  3. Android学习总结(十二)———— BaseAdapter优化

    一.BaseAdapter的基本概念 对于Android程序员来说,BaseAdapter肯定不会陌生,灵活而优雅是BaseAdapter最大的特点.开发者可以通过构造BaseAdapter并搭载到L ...

  4. 使用ListView时遇到的问题

    这周练习ListView时遇到了一个问题,从数据库中查询出的数据绑定到LIstView上,长按某个item进行删除操作,每次点击item取得的id都不对,调了半天终于找到了原因,关键是自己对自定义的B ...

  5. Android自定义组件之ListView

    1-ListView简介 在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示.一个ListView通常有两个职责. (1)将数据填充到 ...

  6. android中Adapter适配器的讲解

    Adapter(适配器的讲解) 适配器就我自己来看,我觉得这是一个非常重要的知识点,Adapter是用来帮助填出数据的中间桥梁,简单点说吧:将各种数据以合适的形式显示在View中给用户看.Adapte ...

  7. Android关于listView的BaseAdapter以及getView的三级优化

    1.4个重写方法的含义 自定义Adapter继承自BaseAdapter(通用适配器)   getCount(); getItem(); getItemId(); getViewTypaCount() ...

  8. 关于BaseAdapter的使用及优化心得(一)

    对于Android程序员来说,BaseAdapter肯定不会陌生,灵活而优雅是BaseAdapter最大的特点.开发者可以通过构造BaseAdapter并搭载到ListView或者GridView这类 ...

  9. 【Android】以BaseAdapter做适配器的ListView及其性能优化

    适配器的Java类 package com.app.adapter; import org.json.JSONArray; import org.json.JSONObject; import and ...

随机推荐

  1. 浅谈JavaScript的面向对象程序设计(三)

    前面已经对JavaScript的面向对象程序设计作了简单的介绍,包括了对象的属性.对象的工厂模式.构造函数和原型等.通过介绍,这些创建对象的方法依然有不少优化和改进的地方. 组合使用构造函数模式和原型 ...

  2. Windows 7旗舰版安装Visual Studio 2013 Ultimate的系统必备及注意事项

    系统必备: 1.Windows7 SP1 2.IE 10

  3. Java中抽象类和接口的区别?

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

  4. accp

    ACCP(Aptech Certified Computer Professional)是印度最早从事IT职业教育的Aptech计算机教育公司推出的培养软件程序设计人员的课程体系,由北大青鸟集团于20 ...

  5. cocos2d-x 打包成so文件之后,假设出现错误,能够使用ndk-stack来查看里面的异常

    cocos2d-x  打包成so文件之后,假设出现错误,能够使用ndk-stack来查看里面的异常 详细方法.自行百度.

  6. 设计模式-(14)装饰者模式 (swift版)

    一,概念 装饰者模式(Decorator):动态地为一个对象添加一些额外的职责,若要扩展一个对象的功能,装饰者提供了比继承更有弹性的替代方案. 多组合,少继承 二,UML图 抽象构件类(Compone ...

  7. 在Orchard CMS Theme 用代码定义布局Widgets

    因为公司业务需要,经过本人几个月尝试,使用Orchard CMS 开发一个简单的企业门户(地址是http://www.ubof.cn).在刚开始接触Orchard CMS,对于个性化的网页布局不知道怎 ...

  8. YTU 2959: 代码填充--雨昕学矩阵

    2959: 代码填充--雨昕学矩阵 时间限制: 1 Sec  内存限制: 128 MB 提交: 112  解决: 50 题目描述 雨昕开始学矩阵了.矩阵数乘规则:一个数k乘一个矩阵A还是一个矩阵,行数 ...

  9. 一个tomcat部署多个应用实例总结

    项目组有好几个项目需要运行,之前项目少,一个tomcat对应一个项目还能应付,但现在项目多了,要是再一个tomcat对应一个项目的话,一方面看起来很业余,一方面也加大服务器的维护难度.所以现在需要对t ...

  10. Navicat: Can't create a procedure from within another stored routine

    测试调用mysql的存储过程,于是用Navicat写,结果报这个错误,源代码如下: CREATE PROCEDUREQueryDate() BEGIN       SELECTCURDATE(); E ...