传统的

 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. hdu 4970 Killing Monsters(数组的巧妙运用) 2014多校训练第9场

    pid=4970">Killing Monsters                                                                   ...

  2. MVC+ZTree大数据异步树加载

    实例部分: 首先是为ZTree提供的数据规范,定义一个标准的接口,这样对于前台调用是清楚的,简单的,因为它返回的JSON数据将与ZTree默认的数据元素保持一致 /// <summary> ...

  3. Receiver type ‘X’ for instance message is a forward declaration

    这往往是引用的问题. ARC要求完整的前向引用,也就是说在MRC时代可能仅仅须要在.h中申明@class就能够,可是在ARC中假设调用某个子类中未覆盖的父类中的方法的话.必须对父类.h引用,否则无法编 ...

  4. eclipse中将web项目部署到tomcat

    eclipse中将web项目部署到tomcat. myeclipse部署WEB项目到tomcat比较方便,但eclipse貌似默认是不会替你将web自动部署到tomcat下的.你Run as该web项 ...

  5. spring boot实现文件上传下载

    spring boot 引入”约定大于配置“的概念,实现自动配置,节约了开发人员的开发成本,并且凭借其微服务架构的方式和较少的配置,一出来就占据大片开发人员的芳心.大部分的配置从开发人员可见变成了相对 ...

  6. mysql03---触发器

    触发器trigger:某条数据改变,希望其他数据也改变(一张表的数据改变,另一张表的数据也变).监测insert,update,delete.能够监测增删改并出发增删改. 监测点(table)监测事件 ...

  7. C语言中string char int类型转换

    C语言中string -- ::) 转载 ▼ 标签: 操作符 int char c语言 类型转换 分类: C/Cpp ,char型数字转换为int型 "; printf(]-');//输出结 ...

  8. vue 子组件 索引 ref

    尽管有props和events,但是有时任然需要在javascript中直接访问子组件.为此可是使用ref为子组件指定一个索引ID. <div id="parent"> ...

  9. 276D

    贪心 想了一会觉得没什么很好的方法,看了题解 我们枚举每个二进制位,对于l,r如果这位相同就异或到答案里,否则停止,这里肯定是r比l大,也就是r这位是1而l是0,那么我们就让r这位选1,l选0,然后把 ...

  10. 修改 Appdelegate 文件名为添加项目前缀的方法

    本文假设你的项目是 Test, 那么为了给你的 Appdelegate 文件保持按照项目名为前缀 ,就需要对 Appdelegate 文件进行修改前缀名. 技巧分享:将开发中的 Appdelegate ...