BaseAdapter

来源:互联网 发布:java实现日志服务 编辑:程序博客网 时间:2024/05/23 01:32
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;/** * Created by Administrator on 2015/11/6. */public class MyAdapter extends BaseAdapter {    Context context;    List<Help> data;    public MyAdapter(Context context,List<Help> data) {        this.context = context;        this.data=data;    }    /*返回BAseAdapter处理数据源的总数*/    @Override    public int getCount() {        return data.size();    }    /*返回数据源中某个位置的对象*/    @Override    public Object getItem(int position) {        return data.get(position);    }    /*返回数据源中某个位置的对象的ID*/    @Override    public long getItemId(int position) {        return position;    }    /*决定布局的显示效果*/    @Override    public View getView(int position, View convertView, ViewGroup parent) {        ViewHolder viewHolder = null;       /* convertView每次都要进行判空,因为有可能ListView滑动过快,导致布局来不及释放重用,       如果convertView为空,就按照正常流程,为convertView赋值确保convertView不为空*/        if(convertView==null){            convertView= LayoutInflater.from(context).inflate(R.layout.item,null);            viewHolder.text1=(TextView)convertView.findViewById(R.id.text1);            viewHolder.text2=(TextView)convertView.findViewById(R.id.text2);            viewHolder.text3=(TextView)convertView.findViewById(R.id.text3);        }else{            /*Tag不像ID是用标示view的。Tag从本质上来讲是就是相关联的view的额外的信息。            它们经常用来存储一些view的数据,这样做非常方便而不用存入另外的单独结构。他            是给View对象的一个标签,标签可以是任何内容,我们这里把他设置成了一个对象,            因为我们是把Item.xml的元素抽象出来成为一个类ViewHolder,用了setTag,这            个标签就是ViewHolder实例化后对象的一个属性。我们之后对于ViewHolder实例化            的对象holder的操作,都会因为java的引用机制而一直存活并改变convertView的            内容,而不是每次都是去new一个。*/            convertView.setTag(viewHolder);        }        /*此处对布局文件进行赋值*/        Help help=data.get(position);        viewHolder.text1.setText(help.getName());        return convertView;    }    /*ViewHolder通常出现在适配器里,为的是ListView滚动的时候快速设置值,而不必每次都重新创建    很多对象,从而提升性能。ViewHolder只是将需要缓存的那些view封装好,convertView的setTag才    是将这些缓存起来供下次调用。当你的ListView里布局多样化的时候 ViewHolder的作用就有比较明显    的体现了。 当然了,单一模式的布局一样有性能优化的作用 只是不直观。  假如你2种模式的布局     当发生回收的时候 你会用setTag分别记录是哪两种   这两种模式会被封装到ViewHolder中进行保     存方便你下次使用。 VH就是个静态类 与缓存无关的*/    class ViewHolder{        TextView text1;        TextView text2;        TextView text3;    }}
0 0