ViewHolder简洁写法

ViewHolder holder = null;
        if(convertView == null){
                convertView = mInflater.inflate(R.layout.xxx null);
                holder = new ViewHolder();
                holder.tvXXX = (TextView)findViewById(R.id.xxx);
                //...一连串的findViewById
        }
        else{
                holder = (ViewHolder) convertView.getTag();  
        }
        
        
        
        private static class ViewHolder{
                TextView tvXXX;
                //很多view的定义
        }

简洁写法

public class ViewHolder {
    // I added a generic return type to reduce the casting noise in client code
    @SuppressWarnings("unchecked")
    public static <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;
    }
}

在getView里这样
@Override public View getView(int position, View convertView, ViewGroup parent) {

if (convertView == null) {
        convertView = LayoutInflater.from(context).inflate(R.layout.banana_phone, parent, false);
    }

ImageView bananaView = ViewHolder.get(convertView, R.id.banana);
    TextView phoneView = ViewHolder.get(convertView, R.id.phone);

BananaPhone bananaPhone = getItem(position);
    phoneView.setText(bananaPhone.getPhone());
    bananaView.setImageResource(bananaPhone.getBanana());

return convertView;
}

SparseArray:优化过的存储integer和object键值对的hashmap,使用折半查找,并优化了内存分配

ViewHolder Partten是把一个自定义类绑定到一个view,这种是把SparseArray绑定到一个view,虽然SparseArray 初始化会分配10长度的地址,理论上貌似浪费了内存,理论上插入和删除操作也是有时间损耗的,但是这些都在允许范围内。

其实可以加一个私有构造函数防止外部实例化

private ViewHolder(){

}

参考:http://www.eoeandroid.com/thread-321547-1-1.html

时间: 2024-08-30 03:37:07

ViewHolder简洁写法的相关文章

ViewHolder模式简洁写法

参考网址:http://blog.csdn.net/hmily7532361/article/details/18368235 在安卓中 自定义Adapter时,使用ViewHolder可缓存每个Item的View,减少一些不必要的操作,提高性能.在网上看到一种比较简洁的写法,避免每个自定义的Adapter定义ViewHolder实体类. import android.util.SparseArray; import android.view.View; /** * * @类名 ViewHold

android中ViewHolder通用简洁写法

public class ViewHolder {     // I added a generic return type to reduce the casting noise in client code     @SuppressWarnings("unchecked")     public static <T extends View> T get(View view, int id) {         SparseArray<View> view

ListView优化的时候ViewHolder的简洁写法

在ListVIew做复用优化的时候,经常会写ViewHolder,还需要很麻烦的去findview,我最讨厌写一堆的这样代码了,今天看到了一个极简的写法,很好用,很简洁啊!!! public static <T extends View> T getAdapterView(View convertView, int id) {        SparseArray<View> viewHolder = (SparseArray<View>) convertView.ge

ViewHolder的简洁写法

该方法外国老写的,分享一下 提供一个静态方法: public class ViewHolder {    @SuppressWarnings("unchecked")    public static <T extends View> T get(View view, int id) {        SparseArray<View> viewHolder = (SparseArray<View>) view.getTag();        if

jQuery全选、全不选、反选的简洁写法【实例】

全选方面的功能几乎是每个需要列表展示的网站所必不可少的,当然此功能也有很多种写法,现在介绍一下,比较简洁易懂的写法: <input type="checkbox" name="gogf[]"/> <input type="checkbox" name="gogf[]"/> <input type="checkbox" name="gogf[]"/> &

Python if else简洁写法,列表推导式,三目运算符写法

https://www.cnblogs.com/xiexiaoxiao/p/7772441.html https://blog.csdn.net/su_bao/article/details/81484483 https://blog.csdn.net/leavemetomorrow/article/details/90641362 1. 当只有 if 时,列表生成式构造为 [最终表达式 - (范围选择 - 范围过滤)] >>> [num ** 2 for num in range(10

linux绑定连续ip的简洁写法

生产环境中遇到单网卡多ip的时候,我们可以一个个添加虚拟子网卡来添加ip,例如ifcfg-eth0:1这种格式,但是如果我们添加的ip是连续的话,则可以用简洁的方法来实现 参考配置文件如下: # cat ifcfg-eth0-range0  //(这里range是关键字,eth0根据自己实际网卡名替换,具体可以参考/etc/init.d/network脚本)DEVICE=eth0BOOTPROTO=staticONBOOT=yesTYPE=EthernetIPADDR_START=205.229

arttemplate.js简洁写法案例

<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>简介语法</title> </head> <body> <div id="box"></div> <!--**注意** 模版当中没有其他全局变量 --> <!-- <

AJAX的简洁写法

1 // ajax操作 2 $('#btn').on('click',function(){ 3 var url = "{:url('confirm')}"; 4 var actual_money=$('.input').val() 5 var id = "{$id}"; 6 $.post( 7 url, 8 {actual_money:actual_money,id:id}, 9 function (index) { 10 if(index.code==1){ 1