传统的

 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. 清理一下电脑垃圾,打开Eclipse发现左边的所有项目消失了

    使用360清理一下电脑垃圾,打开Eclipse发现左边的所有项目消失了,但在相应的workspace能够找到项目,这个问题已经是第三次遇到了(预计是被360清理掉Eclipse的一些部署或配置文件所导 ...

  2. POJ之01背包系列

    poj3624 Charm Bracelet 模板题 没有要求填满,所以初始化为0就行 #include<cstdio> #include<iostream> using na ...

  3. 60年代进程 80年代线程 IPC How the Java Virtual Machine (JVM) Works

    小结: 1. To facilitate communication between processes, most operating systems support Inter Process C ...

  4. MVC Web Api 发布到Azure报错

    I fixed this by reinstalling the NuGet package, which corrects broken dependencies. From the package ...

  5. 【转】Google 发布 Android 性能优化典范(比较老,但很实用)

    2015年伊始,Google发布了关于Android性能优化典范的专题, 一共16个短视频,每个3-5分钟,帮助开发者创建更快更优秀的Android App.课程专题不仅仅介绍了Android系统中有 ...

  6. codeforces 689A A. Mike and Cellphone(水题)

    题目链接: A. Mike and Cellphone time limit per test 1 second memory limit per test 256 megabytes input s ...

  7. 为ios app添加广告条

    1.广告简介 2.实现步骤: 1>.添加 iAd.framework 框架 2,使用storyboard 运行结果: 2>添加 ADBannerView 视图,并设置代理方法 3>思 ...

  8. hdu5335(搜索)

    Walk Out Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Su ...

  9. 使用Asp.net Identity 创建用户 、登录代码

    1.Identity 1中的注册.登录.注销代码 vs 2013中自带的注册用户代码: 1.首先创建一个ApplicationUser 初始化用户名. 2.使用UserManager创建一个用户,用使 ...

  10. TCP/IP协议的建立连接与关闭连接过程

    一.建立连接(三次握手) 第一次握手:建立连接时,客户端发送SYN(seq=x)包到服务器,并进入SYN_SENT状态,等待服务器的确认.SYN:同步序列编号(Synchronize Sequence ...