万能Adapter以及ViewHolder性能优化

//CommonAdapter
import android.content.Context;
import android.widget.BaseAdapter;

import java.util.List;

/**
 * Created by Administrator on 2016/1/28.
 */
public abstract class CommonAdapter<T> extends BaseAdapter {
    private List<T> mDatas;
    private int LayoutId;
    private Context context;

    public CommonAdapter(List mDatas,int layoutId,Context context){
        this.mDatas=mDatas;
        this.context=context;
        this.LayoutId=layoutId;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public Object getItem(int position) {
        return mDatas.get(position);
    }

    @Override
    public int getCount() {
        return mDatas.size();
    }

    public List<T> getList(){
        return mDatas;
    }

    public void addBeanAtStart(T data){
        mDatas.add(0,data);
        notifyDataSetChanged();
    }
    public void addBeanAtEnd(T data){
        mDatas.add(data);
        notifyDataSetChanged();
    }
    public void addListAtStart(List datas){
        mDatas.addAll(0, datas);
        notifyDataSetChanged();
    }
    public void addListAtEnd(List datas){
        mDatas.addAll(datas);
        notifyDataSetChanged();
    }
    public void remove(int position){
        if (mDatas!=null&&position<mDatas.size()&&position>=0)
        mDatas.remove(position);
        notifyDataSetChanged();
    }
    public void remove(T data){
        mDatas.remove(data);
        notifyDataSetChanged();
    }
    public void removeAll(){
        if(mDatas!=null){
            mDatas.clear();
            notifyDataSetChanged();
        }
    }
    public void replaceBean(int position,T data){
        mDatas.remove(position);
        mDatas.add(position,data);
    }
}
ViewHolder :
import android.util.SparseArray;
import android.view.View;

/**
 * Created by Administrator on 2016/1/28.
 */
public class ViewHolder {
    public static <T extends View> View get(int id, View convertView){
        SparseArray<View> viewHolder= (SparseArray<View>) convertView.getTag();
        if (viewHolder==null){
            viewHolder=new SparseArray<>();
            convertView.setTag(viewHolder);
        }
        View childView=viewHolder.get(id);
        if(childView==null){
            childView=convertView.findViewById(id);
            viewHolder.put(id, childView);
        }
        return childView;
    }
}
时间: 2024-12-17 17:26:05

万能Adapter以及ViewHolder性能优化的相关文章

Android之ListView性能优化——万能适配器

如下图,加入现在有一个这样的需求图,你会怎么做?作为一个初学者,之前我都是直接用SimpleAdapter结合一个Item的布局来实现的,感觉这样实现起来很方便(基本上一行代码就可以实现),而且也没有觉得有什么不好的.直到最近在慕课网上看到鸿洋大神讲的“机器人小慕”和“万能适配器”两节课,才对BaseAdapter有所了解.看了鸿洋大神的课程之后,我又上网搜了几个博客,也看了一些源码和文档,于是打算写一个帖子来记录一下自己的学习历程. 在今天的帖子中,我们从一个最基本的实现BaseAdapter

ListView 性能优化------使用ViewHolder,修改layout_weight属性为“match_parent”

转载自:http://blog.csdn.net/pkxiuluo01/article/details/7380860 Adapter是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View.如果列表中有很多的项时会占用极大的系统资源,所以我们需要优化Adapter 1.convertView的使用 [java] view plaincopy Java代码 public View getView(int position, 

Android之ListView性能优化——使用ConvertView和ViewHolder

使用ConvertView和ViewHolder的优化是针对ListView的Adapter(BaseAdapter)的.这种优化的优点如下: 1)重用了ConveertView,在很大程度上减少了内存的消耗.通过判断ConvertView是否为NULL,如果是NULL那么就需要生成一个新的View出来(通过LayoutInflater生成),绑定数据后显示给用户:如果ConvertView不是NULL,则我们需要做的就只有绑定数据并呈现给用户. 2)由于ListView中的Item往往都是只有

Android性能优化之Listview(ViewHolder重用机制)

相信大家在很多时候都会用到ListView这个控件,因为确实是用的很多很多,但是有木有遇到过当数据很多很多的时候,往下滑ListView时有时候会卡顿,这就需要我们来优化它了. ListView优化主要有下面几个方面: 1.convertView重用 2.ViewHolder的子View复用 3.缓存数据复用 一.convertView重用 首先讲下ListView的原理:ListView中的每一个Item显示都需要Adapter调用一次getView()的方法,这个方法会传入一个convert

Android ListView性能优化实战方案

前言: 对于ListView,大家绝对都不会陌生,只要是做过Android开发的人,哪有不用ListView的呢? 只要是用过ListView的人,哪有不关心对它性能优化的呢? 关于如何对ListView进行性能优化,不仅是面试中常常会被问到的(我前段时间面试了几家公司,全部都问到了这个问题了),而且在实际项目中更是非常重要的一环,它甚至在某种程度上决定了用户是否喜欢接受你的APP.(如果你的列表滑起来很卡,我敢说很多人会直接卸载) 网上关于如何对ListView进行性能优化,提出了很多方案.但

Android高手进阶——Adapter深入理解与优化

Android高手进阶--Adapter深入理解与优化 通常是针对包括多个元素的View,如ListView,GridView.ExpandableListview,的时候我们是给其设置一个Adapter.Adapter是与View之间提供数据的桥梁,也是提供每一个Item的视图桥梁.   以ListView为例.其工作原理为: ● ListView针对List中每一个item, adapter都会调用一个getView的方法获得布局视图 ●我们通常会Inflate一个新的View,填充数据并返

一步一步实现listview加载的性能优化

listview加载的核心是其adapter,本文针对listview加载的性能优化就是对adpter的优化,总共分四个层次: 0.最原始的加载 1.利用convertView 2.利用ViewHolder 3.实现局部刷新 [转载请保留本文地址:http://www.cnblogs.com/goagent/p/5158064.html]  〇.最原始的加载 这里是不经任何优化的adapter,为了看起来方便,把listview的数据直接在构造函数里传给adapter了,代码如下: 1 priv

ListView深入理解:性能优化1

一:列表显示三要素: 1.ListView:用于显示列表的view: 2.Adapter:  将数据映射到ListView: 3.Data:     具体的将要被映射的字符串.图片或其他基本组件: 二:优化原理: 1.只创建必要的view对象: ListView加载数据的方式: 首先调用getCount()函数,根据返回值得到listView的长度: 然后根据这个长度,调用getView()获取listView的每一项item所对应的view. 如果每一个item都去创建新的对象,必然会占据过多

23、?性能优化与测试

? UI性能优化 1. 由于View会不断刷新.变化,所以应尽量减少不必要的onMeasure. onDraw调用. 2. 对于ListView.GridView等需要Adapter加载数据的控件,在 getView方法中应尽量减少访问耗资源的资源,例如,大量的写入文 件操作,访问网络等.否则这些控件会出现不时的停顿现象.如果非 要访问这些资源,应将这些操作放到线程中. 3. 在getView方法中应convertView参数,而不要一味地创建新的视图 对象,并且可以使用convertView.